2012-04-06 15 views
7

जावा में डेटाबेस कनेक्शन बंद करने के बाद, क्या मैं इसे फिर से खोल सकता हूं? या मुझे फिर से DriverManager.getConnection() करने की ज़रूरत है?जावा में डेटाबेस कनेक्शन दोबारा खोलें

+4

इसे कितना कठिन प्रयास कर रहा है? –

+0

क्या आप कनेक्शन पर कोई भी खुली विधि देखते हैं? – MrJames

+0

मुझे कनेक्शन में कोई भी खुली विधि नहीं दिखाई देती है। तो मैं इसे कैसे कोशिश करूं? कॉलिंग 'getConnection' काम करेगा, कोशिश की, लेकिन "सही" तरीका है? –

उत्तर

4

मुझे 100% यकीन नहीं है कि DriverManager.getConnection() पर कॉल करने के लिए आवश्यक है लेकिन नुकसान क्या है? आप कनेक्शन को पहले ही बंद कर चुके हैं, जब आपको इसकी आवश्यकता हो तो बस एक नया पकड़ लें। कचरा कलेक्टर उस बंद कनेक्शन के बारे में चिंतित होने के बाद चिंता करता है।

1

हाँ, आप कनेक्शन बंद करने के बाद कुछ भी नहीं कर सकते हैं। आप getConnection

0

कॉल करने के लिए Javadoc के रूप में है का उल्लेख है:

getConnection: Attempts to establish a connection to the given database URL. 

इसलिए हाँ, getConnection बुला() फिर से एक ही तरीका है एक बार आप पिछले कनेक्शन बंद कर दिया डेटाबेस के साथ एक नया कनेक्शन स्थापित करने की तरह दिखता है।

7

यदि आपने connection.close(); कहा था, connection (java.sql.Connection प्रकार मानते हुए) बेकार हो जाता है। यह ऑपरेशन इस कनेक्शन ऑब्जेक्ट के डेटाबेस और जेडीबीसी संसाधनों को जारी करता है।

तो हाँ आप एक ताजा कनेक्शन लेने के लिए जब इससे पहले कि आप

connection = DriverManager.getConnection() 
+0

मैंने सी # में सबकुछ करने के बाद बस जेडीबीसी को एसक्यूएल सर्वर कनेक्शन करना शुरू कर दिया और लड़का कल मेरे आधे दिन के लिए यह एक बड़ा रहस्य था। – JoeManiaci

0

खैर आदर्श रूप में से आगे बढ़ सकते हैं मैं थोड़ा अलग दृष्टिकोण बना दिया है और एक अलग समाधान दिया की जरूरत है।

डेटाबेस खोलने और बंद करने के बजाय, जो क्लाइंट के हर अनुरोध पर सचमुच हो रहा है, मैंने कक्षा के सिंगलटन इंस्टेंस को बनाया और एकल खुला कनेक्शन बनाया जिसे सर्वर की प्रक्रिया जिंदा रहने तक पुन: उपयोग की जाएगी।

संक्षेप में:

मैं Database वर्ग getConnection()Database अंदर वर्ग

public Connection getConnection() throws Exception { 
    try { 
     String connectionURL = "jdbc:mysql://localhost:3306/someDatabase"; 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     if (connection == null) { 
      connection = DriverManager.getConnection(connectionURL, "someUser", LOCAL_MYSQL_PASSWORD); 
     } 

     return connection; 
    } catch (Exception e) { 
    } 

} 

सिंगलटन है, इसलिए एक ही कक्षा पुन: उपयोग और एक ही कनेक्शन पुन: उपयोग कर सकते है।

मैंने इसे show processList द्वारा परीक्षण किया है, और यह लगभग 100 कनेक्शन दे रहा था अगर मैं कनेक्शन बंद नहीं करूँगा, और यहां तक ​​कि अगर मैं कनेक्शन बंद कर दूंगा, तो वास्तविक प्रक्रिया को मारने की संभावना नहीं होगी, लेकिन सोने में डाला जाएगा इसके बजाए इसका उपयोग तब भी किया जाएगा जब भी वही ग्राहक एक ही अनुरोध के लिए पूछेगा, लेकिन यदि आपके पास 15 अनुरोध हैं, तो उनमें से प्रत्येक के पास अलग-अलग प्रक्रियाएं होंगी, इसलिए मेरे लिए कनेक्शन बंद करना और खोलना सबसे अच्छा समाधान नहीं था।

इसके द्वारा मेरे पास 1 एकल प्रक्रिया है जो प्रश्नों के लिए जिम्मेदार परत है।

संबंधित मुद्दे