从方法返回到新对象时,原始resultSet会发生什么?

伪代码可以更好地解释我的自我。 我现在正在学习Java。

如果我有方法

public resultSet getEverything() { resultSet rs = blabla; return rs } 

我不能rs.close()因为我需要在我检索它的方法中使用它,因此我将使用它,并且可能’关闭’我创建的新resultSet。

从前一个resultSet发生了什么? 它是否被垃圾收集器收集? 当我关闭’new’resultSet时它会自动关闭吗? 它对代码效率/性能有任何影响吗?

任何反馈都会非常感激:)因为这让我有点困惑。 它更像是一个OOP问题,而不是我认为的Java。 谢谢!

您不应该从方法返回java.sql.ResultSet。 应始终创建它,映射到对象或数据结构,并在finally块中创建它的方法范围内关闭。

java.sql.ResultSet与数据库游标(稀缺资源)相关联。 你不想长时间保持开放状态。

垃圾收集器不会清除数据库的结果集,语句或连接。 它将从内存中删除引用,但光标或连接仍将在数据库端打开。 您有责任正确关闭它们或者耗尽电源。

对象,数据结构或CachedRowSet是正确的返回方式。

这里只有一个resultSet。 您创建它并在此方法中返回它; 调用方法(调用getEverything() )现在拥有它 – 它没有副本,或类似的东西; 它具有您在此方法中创建的resultSet。 但是如果要关闭它,调用方法必须分配getEverything()的结果 – 如下所示:

 resultSet rs = getEverything(); 

与简单地调用这样的方法:

 getEverything(); 

在第二种情况下,将创建结果集,然后将其提供给幕后垃圾收集器(基本上,删除),而无需关闭它。