我正在使用我在代码中传递的javax.sql.rowset.CachedRowSet
对象。填充它的ResultSet
在CachedRowSet
传递给我的其余代码之前关闭(仅用于阅读,我不以任何方式更新或修改它):
public CachedRowSet getData(String query) throws SQLException {
RowSetFactory aFactory = RowSetProvider.newFactory();
CachedRowSet crs = aFactory.createCachedRowSet();
Statement stmt = null;
ResultSet rs = null;
try {
stmt = conn.createStatement();
rs = stmt.executeQuery(query);
crs.populate(rs);
} finally {
DbUtils.closeQuietly(null, stmt, rs);
}
return crs;
}
鉴于上述设置,当我完成close()
或release()
CachedRowSet
对象时,它是否有意义? This answer似乎表明close()
没有伤害,但没有解决release()
,或两者之间的差异。我想我可以做release()
后跟close()
以防万一,但我想了解一点。请注意,我甚至序列化CachedRowSet
对象,然后将其从其他模块中的String
内部化,这样我也可以在重新内化的实例上调用close()
和release()
没有任何意义。
答案 0 :(得分:1)
我不认为我完全理解你的问题。但..
realese() - >释放此CachedRowSet对象的当前内容,并向所有已注册的侦听器发送rowSetChanged事件。在调用此方法后,将丢弃任何未完成的更新,并且行集不包含任何行。没有与基础数据源的交互,任何行集内容,元数据和内容更新都应该是不可恢复的。 链接:(http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/CachedRowSet.html)
关闭() - >它继承自ResultSet 立即释放此ResultSet对象的数据库和JDBC资源,而不是等待它自动关闭时发生。
关闭ResultSet对象不会关闭ResultSet创建的Blob,Clob或NClob对象。 Blob,Clob或NClob对象至少在创建它们的事务期间保持有效,除非调用它们的free方法。
关闭ResultSet时,通过调用getMetaData方法创建的任何ResultSetMetaData实例仍可访问。
注意: CachedRowSet不保持连接活动。它在执行查询或更新时只需要一个连接。
希望它有所帮助:)