अपवाद एप्लिकेशन कोड के एक विशिष्ट मामले को इंगित करता है जो डेटाबेस कनेक्शन को लीक करता है। आपको यह सुनिश्चित करना होगा कि आप और . प्राप्त कर लें उन सभी को बंद करें (Connection
, Statement
और ResultSet
) एक try-with-resources
में
सामान्य JDBC मुहावरे के अनुसार उसी विधि ब्लॉक में ब्लॉक करें।
public void create(Entity entity) throws SQLException {
try (
Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(SQL_CREATE);
) {
statement.setSomeObject(1, entity.getSomeProperty());
// ...
statement.executeUpdate();
}
}
या जब आप Java 7 पर नहीं हों, तो try-finally
. में खंड मैथा। उन्हें finally
में बंद करना गारंटी देगा कि अपवादों के मामले में वे भी बंद हैं।
public void create(Entity entity) throws SQLException {
Connection connection = null;
PreparedStatement statement = null;
try {
connection = dataSource.getConnection();
statement = connection.prepareStatement(SQL_CREATE);
statement.setSomeObject(1, entity.getSomeProperty());
// ...
statement.executeUpdate();
} finally {
if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {}
if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}
}
}
हां, कनेक्शन पूलिंग का उपयोग करते समय भी आपको अभी भी कनेक्शन स्वयं बंद करने की आवश्यकता है। शुरुआत करने वालों के बीच यह एक सामान्य गलती है कि वे सोचते हैं कि यह स्वचालित रूप से बंद को संभाल लेगा। यह सच नहीं है . कनेक्शन पूल अर्थात् एक लपेटा हुआ कनेक्शन देता है जो निम्न में कुछ ऐसा करता है ():
public void close() throws SQLException {
if (this.connection is still eligible for reuse) {
do not close this.connection, but just return it to pool for reuse;
} else {
actually invoke this.connection.close();
}
}
उन्हें बंद नहीं करने से कनेक्शन को पुन:उपयोग के लिए पूल में वापस नहीं छोड़ा जाएगा और इस प्रकार यह बार-बार एक नया प्राप्त करेगा जब तक कि डीबी कनेक्शन से बाहर नहीं हो जाता है जिससे आपका एप्लिकेशन क्रैश हो जाएगा।
यह भी देखें:
- JDBC में कनेक्शन, स्टेटमेंट और रिजल्टसेट को कितनी बार बंद करना चाहिए?
- क्या मल्टीथ्रेडेड सिस्टम में स्थिर java.sql.Connection इंस्टेंस का उपयोग करना सुरक्षित है?
- पूल में JDBC कनेक्शन बंद करना