0

我正在使用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()也有意义?这个答案似乎表明没有伤害但没有解决,或者两者之间的区别。我想我可以做 a后跟 a以防万一,但我想了解更多。请注意,我什至序列化了该对象,然后从另一个模块中将其内部化,因此我也可以在没有任何意义的重新内部化的实例上调用和。release()CachedRowSetclose()release()release()close()CachedRowSetStringclose()release()

4

1 回答 1

1

我不认为我完全理解你的问题。但..

realese() -> 释放此 CachedRowSet 对象的当前内容并向所有注册的侦听器发送 rowSetChanged 事件。调用此方法后,任何未完成的更新都将被丢弃,并且行集不包含任何行。与底层数据源没有交互,任何行集内容、元数据和内容更新都应该是不可恢复的。链接:( http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/CachedRowSet.html

close() -> 它继承自 ResultSet 立即释放此 ResultSet 对象的数据库和 JDBC 资源,而不是等待它自动关闭时发生。

ResultSet 对象的关闭不会关闭 ResultSet 创建的 Blob、Clob 或 NClob 对象。Blob、Clob 或 NClob 对象至少在创建它们的事务期间保持有效,除非调用它们的自由方法。

当 ResultSet 关闭时,通过调用 getMetaData 方法创建的任何 ResultSetMetaData 实例仍然可以访问。

注意: CachedRowSet 不能保持连接处于活动状态。它在执行查询或更新时只需要一个连接。

希望能帮助到你 :)

于 2014-01-07T14:53:28.577 回答