Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

JDBC और MySQL में कनेक्शन कहां बंद करना चाहिए?

उत्तर

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-catch close() के संभावित 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
  • कभी भी कनेक्शन खुला न छोड़ें
  1. - MySQL व्यू कहाँ असंगत हो सकते हैं और उनकी स्थिरता कैसे सुनिश्चित करें?

    अद्यतन योग्य व्यू के मामले में, यह काफी संभव है कि हम उस डेटा को अपडेट करें जो व्यू के माध्यम से दिखाई नहीं देता क्योंकि हम एक व्यू बनाते हैं जो केवल तालिका के आंशिक डेटा को प्रकट करता है। ऐसे अपडेट व्यू को असंगत बनाते हैं। हम WITH CHECK OPTION का उपयोग करके व्यू की स्थिरता सुनिश्चित कर सकते हैं जब

  1. - MySQL में WHERE बनाम HAVING?

    हम परिणामों को फ़िल्टर करने के लिए WHERE क्लॉज नामक एक सशर्त क्लॉज का उपयोग कर सकते हैं। इस WHERE क्लॉज का उपयोग करके, हम एक टेबल से आवश्यक रिकॉर्ड्स चुनने के लिए चयन मानदंड निर्दिष्ट कर सकते हैं। HAVING क्लॉज रो के समूह या एग्रीगेट्स के लिए फ़िल्टर कंडीशन निर्दिष्ट करता है। WHERE क्लॉज का उपयोग ए

  1. MySQL JDBC ड्राइवर कनेक्शन स्ट्रिंग क्या है? MySQL JDBC ड्राइवर कनेक्शन स्ट्रिंग क्या है?

    MySQL JDBC कनेक्शन स्ट्रिंग इस तरह दिखती है − Class.forName(com.mysql.jdbc.Driver); ऊपर, Driver एक इंटरफेस है। जब भी आपका JDBC एप्लिकेशन सर्वर के बाहर चल रहा होता है, तो DriverManager क्लास कनेक्शन स्थापित करती है। DriverManager क्लास निम्न है − conn = (Connection) DriverManager.get