伪代码可以更好地解释我自己。我现在正在学习 Java。
如果我有方法
public resultSet getEverything()
{
resultSet rs = blabla;
return rs
}
我不能rs.close()
,因为我需要在检索它的方法中使用它
因此,我将使用它,并且可能“关闭”我创建的新结果集。
之前的结果集会发生什么? 是否留待垃圾收集器收集? 当我关闭"new"结果集时它会自行关闭吗? 它对代码效率/性能有影响吗?
任何反馈将不胜感激:)因为这让我有点困惑。我认为这更像是一个 OOP 问题而不是 Java 问题。 谢谢!
最佳答案
您不应该从方法返回 java.sql.ResultSet。它应该始终被创建,映射到对象或数据结构,并在finally block 中创建它的方法的范围内关闭。
java.sql.ResultSet 与数据库游标相关联,这是一种稀缺资源。您不想让它们长时间打开。
垃圾收集器不会清理结果集、语句或数据库连接。它将从内存中删除引用,但游标或连接仍将在数据库端打开。您有责任正确关闭它们,否则您将耗尽供应。
返回对象、数据结构或 CachedRowSet 是正确的。
关于java - 当原始 resultSet 从方法返回到新对象时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2258124/