接続は後で閉じられますが、JDBC 結果セットとステートメントは別々に閉じる必要がありますか? 質問する

接続は後で閉じられますが、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) {};
}

問題は、接続を閉じることで目的が達成されるのか、あるいは一部のリソースが使用中のままになるのかということです。

ベストアンサー1

あなたがやったことは完璧で、とても良い練習です。

私がこれを良い方法だと言う理由は... たとえば、何らかの理由で「プリミティブ」タイプのデータベース プーリングを使用していて、 を呼び出すとconnection.close()、接続はプールに返され、ResultSet/ はStatement決して閉じられず、さまざまな新しい問題に遭遇することになります。

したがって、常にconnection.close()クリーンアップを期待できるわけではありません。

おすすめ記事