首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CachedRowSet ::release()与close()

CachedRowSet ::release()与close()
EN

Stack Overflow用户
提问于 2013-11-03 21:56:43
回答 1查看 1.4K关注 0票数 0

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

代码语言:javascript
复制
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(),这没有任何意义。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-07 14:53:28

我想我不完全理解你的问题。但是..。

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

希望它有帮助:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19758657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档