繁体   English   中英

返回结果集在 java JDBC

[英]Returning resultSet in java JDBC

如何在关闭连接和preparedStatement时从方法返回ResultSet? 当我关闭连接和准备好的语句时,它给出了“连接已关闭”的异常。 在这种情况下我可以跳过结束部分吗?

RowSet

如果您真的想在关闭连接后返回一个ResultSet ,请使用它的子接口RowSet

更具体地说,您将需要其中一种断开连接的RowSet类型。 这些包括:

… 如此所述。

有关更多信息,请执行Web 搜索 并参阅 Oracle Corp 免费提供的 Java 教程使用 RowSet 对象 并搜索 Stack Overflow 以了解更多信息。

record

另一种方法是定义数据传输 Object (DTO)

Java 16+ 中的新记录功能非常适合用于透明且不可变地传输数据的目的。 使用记录,您只需声明每个成员字段的类型和名称。 编译器隐式创建构造函数、访问器、 equals & hashCodetoString

您编写代码来循环遍历ResultSet行,将数据复制到记录对象中,并存储在ListSet中。

当您执行查询并获取 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM