首页 > 技术文章 > 如何从结果集中遍历得到一条条的数据?

daweige 2017-11-23 17:45 原文

平常我们遍历结果集的时候,都必须创建一个实体bean,然后将结果集遍历的时候通过set方法放到这个实体bean对象中.

 1 String sql="select * from book"; 
 2 try{
 3 Connection con = MyConnection.getConnection();
 4 Statement statement = con.createStatement();
 5 ResultSet resultSet = statement.executeQuery(sql);
 6 // ResultSetMetaData rsmd = resultSet.getMetaData();
 7 // int count = rsmd.getColumnCount();
 8  while(resultSet.next())
 9 {
10 Book book = new Book();
11 book.setBookName(resultSet.getString("bookName"));
12  book.setPrice(resultSet.getString("price")); 
13 book.setPicUrl(resultSet.getString("picUrl"));
14  list.add(book);
15  }catch(SQLException e)
16 { e.printStackTrace();
17  } catch (ClassNotFoundException e) { 
18 e.printStackTrace();
19  }

但是这种遍历结果集局限性很多,如果我们想通过第三方去查询别的数据库呢?难道我们还要把他们实体类通通拷贝过来么?  或者说我们每次查询都要提前知道查询的字段,有没有方法不用实体bean,我们只要数据,要实体bean做什么?

下面的方法,可以借鉴.

 1   /**
 2      * 把ResultSet中取出的数据转换为相应的数据值字符串
 3      * 输出:如果成功执行,返回True,否则返回False,并且在Error中设置错误的详细信息
 4      * @param rsmd ResultSetMetaData
 5      * @param rs ResultSet
 6      * @param i int
 7      * @return String
 8      */
 9     public String getDataValue(ResultSetMetaData rsmd, ResultSet rs, int i)
10     {
11         String strValue = "";
12 
13         try
14         {
15             int dataType = rsmd.getColumnType(i);
16             String name = rsmd.getColumnTypeName(i);
17             System.out.println("sql类型名称为:"+name);
18             int dataScale = rsmd.getScale(i);
19             int dataPrecision = rsmd.getPrecision(i);
20             //数据类型为字符
21             if ((dataType == Types.CHAR) || (dataType == Types.VARCHAR))
22             {
23                 //由于存入数据库的数据是GBK模式,因此没有必要做一次unicodeToGBK
24 //                strValue = StrTool.unicodeToGBK(rs.getString(i));
25                 strValue = rs.getString(i);
26             }
27             //数据类型为日期、时间
28             else if ((dataType == Types.TIMESTAMP) || (dataType == Types.DATE))
29             {
30                 strValue = PubFun.getString(rs.getDate(i));
31             }
32             //数据类型为浮点
33             else if ((dataType == Types.DECIMAL) || (dataType == Types.FLOAT))
34             {
35                 //strValue = String.valueOf(rs.getFloat(i));
36                 //采用下面的方法使得数据输出的时候不会产生科学计数法样式
37                 strValue = String.valueOf(rs.getBigDecimal(i));
38                 //去零处理
39                 strValue = PubFun.getInt(strValue);
40             }
41             //数据类型为整型
42             else if ((dataType == Types.INTEGER) || (dataType == Types.SMALLINT))
43             {
44                 strValue = String.valueOf(rs.getInt(i));
45                 strValue = PubFun.getInt(strValue);
46             }
47             //数据类型为浮点
48             else if (dataType == Types.NUMERIC || dataType == Types.BIGINT)
49             {
50                 if (dataScale == 0)
51                 {
52                     if (dataPrecision == 0)
53                     {
54                         //strValue = String.valueOf(rs.getDouble(i));
55                         //采用下面的方法使得数据输出的时候不会产生科学计数法样式
56                         strValue = String.valueOf(rs.getBigDecimal(i));
57                     }
58                     else
59                     {
60                         strValue = String.valueOf(rs.getLong(i));
61                     }
62                 }
63                 else
64                 {
65                     //strValue = String.valueOf(rs.getDouble(i));
66                     //采用下面的方法使得数据输出的时候不会产生科学计数法样式
67                     strValue = String.valueOf(rs.getBigDecimal(i));
68                 }
69                 strValue = PubFun.getInt(strValue);
70             }
71 
72         }
73         catch (SQLException ex)
74         {
75             ex.printStackTrace();
76         }
77 
78         return PubFun.cTrim(strValue);
79     }

若有别的更好的方法请告诉我,互相学习,谢谢!

推荐阅读