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】:最好的做法是在本地(即在方法中)定义 PreparedStatement
和 ResultSet
,并在执行完成后定义 close
。
PreparedStatement
充当程序和数据库之间的游标,如果不关闭,可能会导致 maximum open cursors exceeded
错误(在 Oracle
的情况下),因为可以打开的游标/描述符的数量是每个连接受限。
就关闭ResultSet
而言,关闭PreparedStatement
会自动关闭ResultSet
(here是javadoc)。理想情况下,您应该使用try with resources 块来实现。
【讨论】:
我将测试 try-with-sources 而不是 finally-try-finally-try。连接是否也应该关闭?也许如果需要,我可以偶尔重新启动连接以上是关于Java/SQL:是不是必须关闭()结果集/语句/连接? [复制]的主要内容,如果未能解决你的问题,请参考以下文章