Java数据库操作中try-with-resources应包含哪些资源?
你的JDBC资源处理是正确的,资源都能被正确关闭
先给你明确结论:你当前的两种写法都符合JDBC资源管理的最佳实践,Connection、Statement、ResultSet都能被自动正确关闭,不用担心资源泄漏问题。
针对第一种场景(executeQuery)
你把Connection、Statement、ResultSet都放进try-with-resources的做法非常标准:
- 这三个类都实现了
AutoCloseable接口,try-with-resources会在代码块执行完毕(无论正常结束还是抛出异常),按照声明的逆序自动调用它们的close()方法:先关ResultSet,再关Statement,最后关Connection,完全匹配JDBC资源关闭的正确顺序。 - 不需要你手动调用任何
close()方法,这种写法已经把资源泄漏的风险降到了最低。
针对第二种场景(executeUpdate)
你这里的处理也是正确的:
executeUpdate()返回的是受影响的行数(int类型),它不是需要关闭的资源,所以确实没必要放进try-with-resources里。- 只需要把
Connection和Statement放进try块就足够了,它们会被自动关闭,不存在资源泄漏的问题。
额外补充个小建议
日常开发里尽量用PreparedStatement代替Statement,不仅能避免SQL注入风险,还能提升重复执行SQL的效率,写法上和你现在的try-with-resources兼容,只需要把connection.createStatement()换成connection.prepareStatement(query)就行。
内容的提问来源于stack exchange,提问作者Nemo
相关产品推荐
相关产品推荐

