उत्तर
JDBC में डेटाबेस कनेक्शन को finally ब्लॉक में बंद करना चाहिए ताकि यह सुनिश्चित हो सके कि अपवाद (exception) होने पर भी कनेक्शन बंद हो जाए।
Java कोड उदाहरण
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class CloseConnectionDemoInFinallyBlock {
public static void main(String[] args) {
String JDBCURL = "jdbc:mysql://localhost:3306/web?useSSL=false";
Connection con = null;
try {
con = DriverManager.getConnection(JDBCURL, "root", "123456");
System.out.println("connection is open");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (con != null) {
con.close();
}
} catch (SQLException sqlException) {
sqlException.printStackTrace();
}
}
}
}
आउटपुट
connection is open
व्याख्या
tryब्लॉक: कनेक्शन खोलना और डेटाबेस ऑपरेशनcatchब्लॉक: अपवाद संभालनाfinallyब्लॉक: हमेशा निष्पादित होता है (चाहे अपवाद हो या न हो)con.close()कनेक्शन पूल में लौटाता है या भौतिक कनेक्शन बंद करता है- नेस्टेड
try-catchclose()के संभावित SQLException के लिए if (con != null)नल पॉइंटर अपवाद रोकता है
Java 7+: Try-with-resources (अनुशंसित)
public class ModernConnectionDemo {
public static void main(String[] args) {
String JDBCURL = "jdbc:mysql://localhost:3306/web?useSSL=false";
try (Connection con = DriverManager.getConnection(JDBCURL, "root", "123456")) {
System.out.println("connection is open");
// डेटाबेस ऑपरेशन
} catch (SQLException e) {
e.printStackTrace();
}
// स्वचालित रूप से con.close() कॉल होता है
}
}
लाभ:
- स्वचालित संसाधन प्रबंधन (ARM)
- कोड कम और साफ
- क्लोज़र की गारंटी
- दबे हुए अपवाद (suppressed exceptions) संभालता है
कनेक्शन पूलिंग (उत्पादन)
उत्पादन में सीधे DriverManager.getConnection() के बजाय कनेक्शन पूल (HikariCP, DBCP2, Tomcat JDBC Pool) उपयोग करें:
// HikariCP उदाहरण
HikariDataSource ds = new HikariDataSource();
ds.setJdbcUrl("jdbc:mysql://localhost:3306/web?useSSL=false");
ds.setUsername("root");
ds.setPassword("123456");
try (Connection con = ds.getConnection()) {
// उपयोग
} // पूल में लौटाया जाता है, बंद नहीं
सारांश
- लेगेसी कोड:
finallyब्लॉक मेंclose() - आधुनिक Java (7+):
try-with-resources - उत्पादन: कनेक्शन पूल +
try-with-resources - कभी भी कनेक्शन खुला न छोड़ें