如何從結果集中遍歷得到一條條的數據?


平常我們遍歷結果集的時候,都必須創建一個實體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     }

若有別的更好的方法請告訴我,互相學習,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM