JAVA將ResultSet遍歷到List中
阿新 • • 發佈:2019-01-29
今天在使用jstl標籤展示查詢結果時遇到一個小問題,即如何將ResultSet物件傳遞給前臺頁面。
在預設情況中我們在使用資料庫查詢時
Class.forName(dom.getDriver()); //載入MYSQL JDBC驅動程式 String url=dom.getUrl()+"/"+datebaseName+"?characterEncoding=UTF-8"; Connection conn = DriverManager.getConnection(url,dom.getUsername(),dom.getPassword()); Statement stat = conn.createStatement(); String sql="select * from "+tableName+" order by "+order+";"; ResultSet rs=stat.executeQuery(sql); list=convertList(rs); stat.close(); conn.close(); return list;
在正常情況下,我們是不能直接將 ResultSet 記錄集 rs 直接傳遞給前臺的,因為 ResultSet 不僅無法進行迴圈遍歷 (即只能每行遍歷,從0至end ,執行一次),而且在實際應用中,它還必須被關閉。當關閉後,rs為null ,結果不再存在。
在這時我們就需要將 ResultSet 物件進行遍歷到 list 中,程式碼如下:
private static List convertList(ResultSet rs) throws SQLException{ List list = new ArrayList(); ResultSetMetaData md = rs.getMetaData();//獲取鍵名 int columnCount = md.getColumnCount();//獲取行的數量 while (rs.next()) { Map rowData = new HashMap();//宣告Map for (int i = 1; i <= columnCount; i++) { rowData.put(md.getColumnName(i), rs.getObject(i));//獲取鍵名及值 } list.add(rowData); } return list; }
檢視以上程式碼,可以看出我們使用 Map 與 MetaDate 使 ResultSet 儲存到 list 中的,因為 list 只能存放元素的索引而不能存放元素的值,所以我們要用到 Map 。