try{
String query= "select user_name from user";
ResultSet rs = queries.performQuery(query);
while(rs.next()){
System.out.println("User Name :" + rs.getString("user_name"));
}
在另一个班级我有这样的事情:
public ResultSet performQuery(String query) throws SQLException
{
try
{
connection = DriverManager.getConnection(sqlUrl,sqlUser,sqlPassword);
stmt = connection.createStatement();
rs = stmt.executeQuery(query);
}
catch(SQLException ex)
{
}
finally{
close(rs);
close(stmt);
close(connection);
}
return rs;
}
现在我得到错误在ResultSet关闭后不允许操作,这显然是因为我正在关闭rs / stmt /连接。
我没有我的代码所以这只是我的头脑,忽略任何语法错误,我希望我的问题仍然很清楚。
所以我的问题是:
如果你想拥有一个方法,例如执行查询,然后在另一个方法中调用它,然后执行rs.next,那么关闭resultset / stmt / connection的适当方法是什么?对我来说,关闭performQuery是有意义的,但这给了我错误。
答案 0 :(得分:2)
如果您使用ResultSet
,则需要连接才能加载更多行。例如,如果你的查询返回1000记录,首先ResultSet将在内存中保留41行,然后当你迭代这个数字时,它将使用Connection来加载另一个记录。在你的情况下,我会使用RowSet
{{ 3}}
答案 1 :(得分:1)
ResultSet
旨在允许结果流式传输,例如一次一条记录。这就是为什么它不是简单地返回某种Collection
而是返回类似于迭代器的东西。事实上,ResultSet
可以通过开放的JDBC连接懒惰地一次加载一条记录。
如果您愿意同时将所有结果记录在内存中,那就说了 - 只需在关闭ResultSet
之前急切地加载所有记录。