[英]Returning resultSet in java JDBC
如何在关闭连接和preparedStatement时从方法返回ResultSet? 当我关闭连接和准备好的语句时,它给出了“连接已关闭”的异常。 在这种情况下我可以跳过结束部分吗?
RowSet
如果您真的想在关闭连接后返回一个ResultSet
,请使用它的子接口RowSet
。
更具体地说,您将需要其中一种断开连接的RowSet
类型。 这些包括:
… 如此处所述。
有关更多信息,请执行Web 搜索。 并参阅 Oracle Corp 免费提供的 Java 教程,使用 RowSet 对象。 并搜索 Stack Overflow 以了解更多信息。
record
另一种方法是定义数据传输 Object (DTO) 。
Java 16+ 中的新记录功能非常适合用于透明且不可变地传输数据的目的。 使用记录,您只需声明每个成员字段的类型和名称。 编译器隐式创建构造函数、访问器、 equals
& hashCode
和toString
。
您编写代码来循环遍历ResultSet
行,将数据复制到记录对象中,并存储在List
或Set
中。
当您执行查询并获取 ResultSet 时,数据尚未从数据库传输到您的 JVM。 考虑拥有一个比 RAM 大得多的大型数据库(这通常是运行数据库的原因),因此您需要逐条处理结果记录。
模式是
while (rs.next()) {
// do something about the record loaded into the ResultSet now
}
rs.close();
如果您在遍历结果集之前关闭数据库连接,您将消除加载更多记录的机会。 例外只是表明这种情况。
另一方面,不关闭结果集意味着您要等到它被垃圾收集。 在此之前,它会停留在 memory 中,并且数据库需要随时准备好传送数据,以防调用 next()。 这也意味着所有可能被锁定的记录都保持锁定状态,直到垃圾收集器启动 - 这可能会导致性能下降甚至死锁。
问题是为什么您需要在处理数据之前关闭连接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.