JDBC का उपयोग करने के लिए हमारा मानक कोड अनुभाग है ...
Connection conn = getConnection(...);
Statement stmt = conn.conn.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rset = stmt.executeQuery (sqlQuery);
// do stuff with rset
rset.close(); stmt.close(); conn.close();
प्रश्न 1: कनेक्शन पूल का उपयोग करते समय, क्या किसी को अंत में कनेक्शन बंद करना चाहिए? यदि हां, तो पूलिंग का उद्देश्य क्या नहीं है? और यदि नहीं, तो जब कनेक्शन का एक विशेष उदाहरण मुक्त हो जाता है और पुन: उपयोग किया जा सकता है तो डेटा स्रोत कैसे जानता है? मैं इस एक पर थोड़ा उलझन में हूँ, किसी भी संकेत की सराहना की।
प्रश्न 2: निम्नलिखित विधि मानक के करीब कुछ भी है? ऐसा लगता है कि पूल से एक कनेक्शन प्राप्त करने का प्रयास किया जा रहा है, और यदि डेटासोर्स स्थापित नहीं किया जा सकता है, तो पुराने ज़माने के DriverManager का उपयोग करें। हम यह भी सुनिश्चित नहीं कर रहे हैं कि रनटाइम में किस हिस्से को निष्पादित किया जा रहा है। ऊपर दिए गए प्रश्न को दोहराते हुए, क्या इस तरह की विधि से आने वाले कनेक्शन को बंद करना चाहिए?
साभार, - एम.एस.
synchronized public Connection getConnection (boolean pooledConnection)
throws SQLException {
if (pooledConnection) {
if (ds == null) {
try {
Context envCtx = (Context)
new InitialContext().lookup("java:comp/env");
ds = (DataSource) envCtx.lookup("jdbc/NamedInTomcat");
return ds.getConnection();
} catch (NamingException e) {
e.printStackTrace();
}}
return (ds == null) ? getConnection (false) : ds.getConnection();
}
return DriverManager.getConnection(
"jdbc:mysql://"+ipaddy+":"+dbPort +"/" + dbName, uName, pWord);
}
संपादित करें: मुझे लगता है कि हम जमा हुए कनेक्शन प्राप्त कर रहे हैं क्योंकि हम एक स्टैक ट्रेस नहीं देखते हैं।