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

标签 java jdbc return resultset

伪代码可以更好地解释我自己。我现在正在学习 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/

相关文章:

python - 如何不返回调用函数?

java - 如果 JSON 具有无效的属性名称,RestTemplate(w/Jackson)调用应该失败

java - 避免 Oracle 死锁的正确设计?

Java/GlassFish MySQLNonTransientConnectionException

mysql - 如何使用 select 获取 Mysql 存储过程中的单行

java - 我必须从多次调用的函数中返回一个值,但我无法做到这一点

Java Python 消息签名与验证

java - 在操作栏中显示列表 fragment

Java 脚本引擎(nashorn 和犀牛): how to stack scopes/bindings?

新 docker 容器上的 java.lang.ClassNotFoundException : Unable to load class: com. microsoft.sqlserver.jdbc.SQLServerDriver