JAVA将ResultSet结果集遍历到List中
程序员文章站
2022-06-15 13:33:52
...
今天在使用jstl标签展示查询结果时遇到一个小问题,即如何将ResultSet对象传递给前台页面。
在默认情况中我们在使用数据库查询时
public List selectDataFromJdbc() throws SQLException, ClassNotFoundException {
Class.forName("oracle.jdbc.driver.OracleDriver"); //加载MYSQL JDBC驱动程序
String url = "jdbc:oracle:thin:@192.168.x.222:1521:orcl";
Connection conn = DriverManager.getConnection(url, "username", "passwd");
Statement stat = conn.createStatement();
String sql = "select u.user_id ,u.account,u.name from " + "sys_user u";
// 格式: String sql = "select * from " + TableName where 1=1;
ResultSet rs = stat.executeQuery(sql);
List 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 。
使用这种方法的好处就是可以创建高复用性的代码 ,因为我们不需要每次通过指定键名取值。
实际工作间接,与君共勉。
代码
package com.example.demo.test;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*JAVA将ResultSet结果集遍历到List中
* @author gblfy
* @date 2020-10-14
*/
public class getColumnName {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
getColumnName getColumnName = new getColumnName();
List list = getColumnName.selectDataFromJdbc();
for (Object o : list) {
System.out.println("ddd:" + o);
}
}
public List selectDataFromJdbc() throws SQLException, ClassNotFoundException {
Class.forName("oracle.jdbc.driver.OracleDriver"); //加载MYSQL JDBC驱动程序
String url = "jdbc:oracle:thin:@10.5.6.222:1521:lisdb";
Connection conn = DriverManager.getConnection(url, "fisknow", "fisknow");
Statement stat = conn.createStatement();
String sql = "select u.user_id ,u.account,u.name from " + "sys_user u";
// 格式: String sql = "select * from " + TableName where 1=1;
ResultSet rs = stat.executeQuery(sql);
List list = convertList(rs);
stat.close();
conn.close();
return 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;
}
}