1. ホーム

[解決済み】JDBC結果セットとステートメントは、その後接続を閉じますが、別々に閉じなければなりませんか?

2022-04-02 01:17:04

質問

使用後はすべてのJDBCリソースを閉じるのが良い習慣と言われています。しかし、次のようなコードがある場合、結果セットとステートメントを閉じる必要がありますか?

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() を掃除する。

お役に立てれば幸いです :)