Java/SQL : Is it mandatory to close() a ResultSet/Statement/Connection?

标签 java mysql jdbc prepared-statement resultset

<分区>

我必须编写 Web 爬虫程序(uni 分配),因此我必须向 MySQL 数据库存储/读取/更新大量数据。

我正在使用 JDBC 连接器,每次我调用一个方法 来联系数据库 我正在定义一个 PreparedStatement 和 ResultSet,最后我关闭 RS,最后关闭 PS。

但是我多次使用相同的方法,而不是让程序更节省时间/资源,而是让它更慢/更重(这就是我不关闭连接的原因)。所以问题是还有其他理由关闭它们还是我应该让它们打开?

如果我不关闭它们,程序似乎没有任何问题,但我不希望它看起来是正确的,但实际上是正确的。

编辑:感谢您提供有关如何关闭的想法,但问题不是如何关闭,而是“它是强制性的”。关闭会使程序变慢,所以我需要知道我是否无法关闭(这似乎是不好的做法)或至少找到更好的选择

最佳答案

  • 最佳做法始终是在本地(即在方法中)定义 PreparedStatementResultSet 并在执行完成后关闭完成。

  • PreparedStatement 充当程序和数据库之间的游标,如果未关闭,可能会导致 maximum open cursors exceeded 错误(如果 Oracle),因为每个连接可以打开的游标/描述符的数量是有限的。

  • 就关闭 ResultSet 而言,关闭 PreparedStatement 会自动关闭 ResultSet(here 是 javadoc)。理想情况下,您应该使用 try with resources阻止实现。

关于Java/SQL : Is it mandatory to close() a ResultSet/Statement/Connection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41555143/

相关文章:

java - 如何在 Spring Boot 中使用 Java 通过更改 JSON 结构中的字段名称(如本例所示)从 JSON 响应中提取特定部分?

java - 检测符号链接(symbolic link)/连接点的跨平台方式?

java - 执行错误 : org. infinispan.util.concurrent.TimeoutException:ISPN000299:10 秒后无法获取 key 的锁

java - 我在 lwjgl 中的多维数据集无法正确呈现

mysql - MySql 中的行计数和分组

mysql - 有两个表时限制如何工作?

mysql - SQL 语法错误 'GENERATED ALWAYS AS IDENTITY'

java - 捕获 Java SQLException

java - 选择列并从其他选择中隐藏

java - 在netbeans中连接oracle数据库