如何从结果集中遍历得到一条条的数据?

平常我们遍历结果集的时候,都必须创建一个实体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     }

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

转载于:https://www.cnblogs.com/daweige/p/7886135.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值