Java/SQL:是不是必须关闭()结果集/语句/连接? [复制]

Posted

技术标签:

【中文标题】Java/SQL:是不是必须关闭()结果集/语句/连接? [复制]【英文标题】:Java/SQL: Is it mandatory to close() a ResultSet / Statement / Connection? [duplicate]Java/SQL:是否必须关闭()结果集/语句/连接? [复制] 【发布时间】:2017-05-24 03:13:57 【问题描述】:

我必须编写一个网络爬虫程序(uni assignment),因此我必须在 mysql 数据库中存储/读取/更新大量数据。

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

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

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

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

【问题讨论】:

请阅读这个..它会回答你的问题..***.com/questions/2225221/… 【参考方案1】:

最好的做法是在本地(即在方法中)定义 PreparedStatementResultSet,并在执行完成后定义 close

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

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

【讨论】:

我将测试 try-with-sources 而不是 finally-try-finally-try。连接是否也应该关闭?也许如果需要,我可以偶尔重新启动连接

以上是关于Java/SQL:是不是必须关闭()结果集/语句/连接? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

怎么使用JAVA连接数据库?

关闭多个语句和结果集的有效方法?

关闭连接会自动关闭语句和结果集吗? [复制]

结果集自动关闭并显示错误结果集关闭后不允许操作

JDBC结果集

JDBC的结果集