JDBC ベスト プラクティス: ResultSet、ステートメント、および接続のクローズド順序
データベースのパフォーマンスを最適化するには、適切な JDBC リソース管理を遵守することが重要です。一般に、使用後に接続を閉じることが推奨されますが、ResultSet と Statements を個別に閉じる必要性についてよく疑問が生じます。
質問:
以下のコード スニペットを考えると、接続を閉じる前に、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) {}; }
回答:
あなたが提供したコード例は、完璧な実践を示しています。接続を閉じることは不可欠ですが、すべてのリソースを確実に解放するには十分ではありません。
接続を閉じても、ResultSet や Statements は自動的に閉じられません。原始的なデータベース プーリング メカニズムが使用され、connection.close() が呼び出された場合、接続はプールに返され、閉じられていない ResultSet と Statements が残されます。これにより、リソース リークや潜在的な問題が発生する可能性があります。
したがって、コード スニペットに示されている順序で ResultSet、Statement、および Connection を閉じることが不可欠です。これにより、すべての JDBC リソースが適切に解放され、メモリ リークが防止されます。
以上がJDBC で接続を閉じる前に、ResultSet とステートメントを閉じる必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。