java - 尽管连接随后关闭,但 JDBC 结果集和语句是否必须单独关闭?

标签 java jdbc

据说使用后关闭所有JDBC资源是一个好习惯。但是如果我有以下代码,是否需要关闭Resultset和Statement?

Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
    conn = // Retrieve connection
    stmt = conn.prepareStatement(// Some SQL);
    rs = stmt.executeQuery();
} catch(Exception e) {
    // Error Handling
} finally {
    try { if (rs != null) rs.close(); } catch (Exception e) {};
    try { if (stmt != null) stmt.close(); } catch (Exception e) {};
    try { if (conn != null) conn.close(); } catch (Exception e) {};
}

问题是关闭连接是否能完成工作,或者它是否会留下一些正在使用的资源。

最佳答案

你所做的是完美的,非常好的实践。

我说它的好习惯的原因...例如,如果由于某种原因您正在使用“原始”类型的数据库池并调用 connection.close(),则连接将被返回到池中并且 ResultSet/Statement 将永远不会关闭,然后您将遇到许多不同的新问题!

所以你不能总是指望 connection.close() 来清理。

我希望这会有所帮助:)

关于java - 尽管连接随后关闭,但 JDBC 结果集和语句是否必须单独关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4507440/

相关文章:

java - UriComponentsBuilder - 如何替换一些queryParams并删除未使用的?

java - InputVerifier 和多个字段

java - Maven 返回编译失败 : package com. mashape.unirest.http 不存在

java - MSSQL 2005 - JDBC4 和子查询

MySQL 驱动程序配置以增加 CloudSQL 的吞吐量

java - JDBC 格式 ResultSet 为表格字符串?

java - 未在套接字中接收字符串

java - 泛型的协方差

java - 为什么这里会出现 javax.naming.NamingException?

java - 如何在 Eclipse 项目中包含 mysql 数据库