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

问题描述

你所做的是完美的,非常好的练习。

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

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

我希望这有帮助 :)

解决方法

使用后关闭所有 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) {};
}

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