2012-09-05 35 views
3

考虑下面的代码片断:即使超出范围,我是否应始终关闭CachedRowSet?

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对象的方法中局部使用。我需要在这里手动关闭它,否则当方法结束时它会保存的内容会被自动收集。

+3

如果绝对没有其他引用,它将在下次执行垃圾回收时成为垃圾回收的候选者;但是当方法结束时不一定会发生这种情况。它会花费你什么来关闭它吗? –

回答

3

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

CachedRowSet对象是一个断开连接的行集,这意味着它 利用到其数据源只简单的连接。它将 连接到其数据源,同时它正在读取数据,以便使用 行填充本身,并再次将更改传播回其基础 数据源。剩下的时间,CachedRowSet对象是 断开连接,包括其数据正在被修改。断开 使得RowSet对象更加精简,因此更容易传递给另一个组件。例如,可以将断开连接的RowSet对象序列化并通过线路传递给诸如个人数字助理(PDA)等瘦客户机。

,这意味着不存在连接问题,关闭 ,这样你们可以让它

但我认为它很好的做法,始终关闭你开什么,它不会离开到你平时不是GC触摸或告诉何时运行。

给出足够大的服务器有很多请求,如果它导致打开文件描述符,它最终可能会成为一个问题。 确保资源关闭始终是最好的