1. 程式人生 > >JAVA將ResultSet遍歷到List中

JAVA將ResultSet遍歷到List中

今天在使用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 。