考虑以下代码片段:

public void getUsers() {
    CachedRowSet rowSet = new CachedRowSetImpl();
    .........     /* Initialize the rowset */
    String query = "SELECT user_id FROM users";
    rowSet.setCommand(query);
    rowSet.execute();
    .........    /* Do some job */

}

此处,CachedRowSet对象在方法中本地使用。我是否需要在此处手动将其关闭,否则方法完成后将自动收集其中包含的内容?

最佳答案

来自:http://docs.oracle.com/javase/1.5.0/docs/api/javax/sql/rowset/CachedRowSet.html

CachedRowSet对象是断开连接的行集,这意味着它
仅短暂使用与其数据源的连接。它连接
读取数据以将其自身填充到其数据源时
在它传播到其基础的更改时
数据源。其余时间,CachedRowSet对象是
断开连接,包括正在修改其数据时。存在
断开连接会使RowSet对象更精简,因此要精简得多
更容易传递给另一个组件。例如,断开连接
RowSet对象可以序列化并通过导线传递到细
客户,例如个人数字助理(PDA)。

这意味着没有连接问题可以关闭
所以你可以离开它

但我认为始终关闭打开的内容而不将其留给GC的良好做法是,通常您不会触摸或告诉何时运行。

如果给一个足够大的服务器处理许多请求,那么如果它导致打开文件描述符,则最终可能会成为问题。
确保资源封闭永远是最好的

07-25 21:45