CachedRowSet :: release()与close()

时间:2013-11-03 21:56:43

标签: java cachedrowset

我正在使用我在代码中传递的javax.sql.rowset.CachedRowSet对象。填充它的ResultSetCachedRowSet传递给我的其余代码之前关闭(仅用于阅读,我不以任何方式更新或修改它):

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()没有任何意义。

1 个答案:

答案 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不保持连接活动。它在执行查询或更新时只需要一个连接。

希望它有所帮助:)