Mysql 将结果集的结果存储在列表中
我的目标是将与MySql数据库的所有交互集中在一个类中(例如SqlUtils)。我基本上希望在连接关闭后仍能保持对Mysql 将结果集的结果存储在列表中,mysql,java-7,Mysql,Java 7,我的目标是将与MySql数据库的所有交互集中在一个类中(例如SqlUtils)。我基本上希望在连接关闭后仍能保持对ResultSet或类似类的访问。以下方法不起作用,因为在我的业务方法收到ResultSet后,会引发异常,因为基础连接已经关闭。我想强调的是,打开和关闭与数据库的连接必须在getResultSet()中进行 我现在想做的是这样的: public List<ResultHolder> getResultSet(String sql) { List<Resul
ResultSet
或类似类的访问。以下方法不起作用,因为在我的业务方法收到ResultSet后,会引发异常,因为基础连接已经关闭。我想强调的是,打开和关闭与数据库的连接必须在getResultSet()
中进行
我现在想做的是这样的:
public List<ResultHolder> getResultSet(String sql) {
List<ResultHolder> list = new LinkedList<>();
try (Connection conn = getConnection();
ResultSet res = conn.createStatement().executeQuery(sql);) {
while(res.next()) {
list.add(res.convertToResultHolder());
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
公共列表getResultSet(字符串sql){
列表=新建LinkedList();
try(Connection conn=getConnection();
ResultSet res=conn.createStatement().executeQuery(sql);){
while(res.next()){
添加(res.convertToResultHolder());
}
}捕获(例外e){
e、 printStackTrace();
}
退货清单;
}
是否有任何类可以满足我的需要,我将其表示为
ResultHolder
如果您希望在连接关闭后仍能访问所有resultset数据,那么我建议您执行以下操作:
public List<Map<String, Object>> getResultSet(String sql) {
// this list will hold all the data returned from resultset
List<Map<String, Object>> rows = new ArrayList<Map<String, Object>>();
try (Connection conn = getConnection();
ResultSet rs = conn.createStatement().executeQuery(sql);) {
while(rs.next()) {
// this map corresponds to each row of the resultset
// key: column-name, value: column-value
Map<String, Object> row = new LinkedHashMap<String, Object>();
// populate each row using resultset's Meta data
ResultSetMetaData meta = rs.getMetaData();
for (int i=1; i<=meta.getColumnCount(); i++)
row.put(meta.getColumnName(i), rs.getObject(i));
rows.add(row);
}
} catch (Exception e) {
e.printStackTrace();
}
return rows;
}
公共列表getResultSet(字符串sql){
//此列表将保存从resultset返回的所有数据
列表行=新建ArrayList();
try(Connection conn=getConnection();
ResultSet rs=conn.createStatement().executeQuery(sql);){
while(rs.next()){
//此映射对应于结果集的每一行
//键:列名,值:列值
映射行=新建LinkedHashMap();
//使用resultset的元数据填充每一行
ResultSetMetaData meta=rs.getMetaData();
因为(inti=1;我知道!正是我所需要的。谢谢!
public List<Map<String, Object>> getResultSet(String sql) {
// this list will hold all the data returned from resultset
List<Map<String, Object>> rows = new ArrayList<Map<String, Object>>();
try (Connection conn = getConnection();
ResultSet rs = conn.createStatement().executeQuery(sql);) {
while(rs.next()) {
// this map corresponds to each row of the resultset
// key: column-name, value: column-value
Map<String, Object> row = new LinkedHashMap<String, Object>();
// populate each row using resultset's Meta data
ResultSetMetaData meta = rs.getMetaData();
for (int i=1; i<=meta.getColumnCount(); i++)
row.put(meta.getColumnName(i), rs.getObject(i));
rows.add(row);
}
} catch (Exception e) {
e.printStackTrace();
}
return rows;
}