我创建了一个从数据库获取详细信息的方法,该方法通过执行 callableStatement 返回 ResultSet 对象。 我想关闭 Connection 和 CallableStatement。为了执行此操作,我使用 try-with-resource。但问题出现在这里,当我从我的方法返回 ResultSet 时,它也会关闭并在从中获取数据时引发异常:
com.microsoft.sqlserver.jdbc.SQLServerException:结果集是 关闭。
据我所知,当从 ResultSet 中获取所有数据或 CallableStatement 将关闭时,ResultSet 将自动关闭。就我而言,当我使用 try-with-resource 时,发生了第二件事。
这就是我的代码的样子。
public ResultSet getUSStates() throws SQLException {
try(
Connection inGlobalConnnections = getConnection();
CallableStatement csmt = inGlobalConnnections.prepareCall("{call mst.USP_GetUSStates()}");) {
csmt.execute();
return csmt.getResultSet();
} catch (Exception e) {
_log.error(e, e);
}
return null;
}
我应该怎么做才能获取记录并随后关闭连接?
注意:我使用多种类似的方法从数据库中获取详细信息。因此,请建议我必须在代码中执行最小更改的方法。
ResultSet
通常应立即处理,而不是移交。
RowSet
相反,请使用
ResultSet
的用于切换的子接口:RowSet
。就您而言, CachedRowSet
听起来很合适。
record
record
类自行缓存数据,从您的 ResultSet
填充这些对象的集合,然后移交该集合。