दिलचस्प पोस्ट
बाइंडिंग विशेषता दृश्य में डुप्लिकेट घटक आईडी का कारण बनती है FileUpload नियंत्रण के साथ एक फ़ाइल का पूरा पथ प्राप्त करें एक फ़ाइल में एक रेखा खोजें और इसे हटा दें नई डेटा.फ्रेम में एक कारक के स्तर के आधार पर डेटा विभाजित करें। फ्रेम एक अलग विधि में परिभाषित आंतरिक श्रेणी के अंदर एक गैर-अंतिम चर को संदर्भित नहीं किया जा सकता ArrayAdapter <myClass> का उपयोग कैसे करें अपडेट के रूप में प्राइमफेस चयनकर्ता कैसे करते हैं – "@ (। मायक्लास)" काम करते हैं? कैसे एक सूची <string> एक DataGridView नियंत्रण करने के लिए बाध्य करने के लिए? मैं जावा में दिनांक प्रारूप कैसे बदल सकता हूँ? इनपुट फ़ील्ड पर फोकस कैसे सेट करना है? मैं पायथन में एक नियमित अभिव्यक्ति के लिए सभी मैचों कैसे पा सकता हूं? चल रहे प्रक्रियाओं को सूचीबद्ध करने के लिए लिनक्स एपीआई? सी # वर्गों और सदस्यों (क्षेत्रों, विधियों, आदि) के लिए डिफ़ॉल्ट दृश्यता? मैं जावास्क्रिप्ट ऑब्जेक्ट को नाम के रूप में एक वैरिएबल का उपयोग करने के लिए एक संपत्ति कैसे जोड़ूं? जावास्क्रिप्ट चर कैसे PHP पास करने के लिए?

जावा में डाटाबेस कनेक्शन बंद करना

मुझे थोड़ा भ्रमित हो रहा है, मैं http://en.wikipedia.org/wiki/Java_Database_Connectivity से नीचे पढ़ रहा था

Connection conn = DriverManager.getConnection( "jdbc:somejdbcvendor:other data needed by some jdbc vendor", "myLogin", "myPassword" ); Statement stmt = conn.createStatement(); try { stmt.executeUpdate( "INSERT INTO MyTable( name ) VALUES ( 'my name' ) " ); } finally { //It's important to close the statement when you are done with it stmt.close(); } 

क्या आपको कॉन कनेक्शन बंद करने की आवश्यकता नहीं है? वास्तव में क्या हो रहा है यदि conn.close () नहीं होता है?

मेरे पास एक निजी वेब ऐप है जो मैं रखता हूं, जो वर्तमान में किसी भी रूप से बंद नहीं करता है, लेकिन क्या वास्तव में एक महत्वपूर्ण एसटीएमटी है, कॉन एक या दोनों?

साइट एक तरफ नीचे जा रहा रहता है लेकिन सर्वर यह कहता है कि यह एक डेटाबेस कनेक्शन मुद्दा है, मेरा संदेह यह है कि इसे बंद नहीं किया जा रहा है, लेकिन मुझे नहीं पता कि अगर किसी को बंद करने के लिए

वेब के समाधान से एकत्रित समाधान "जावा में डाटाबेस कनेक्शन बंद करना"

जब आप अपने Connection का उपयोग करते हैं, तो आपको इसे close() करने की विधि को स्पष्ट रूप से बंद करनी होगी ताकि किसी भी अन्य डेटाबेस संसाधनों (कर्सर, हैंडल, इत्यादि) को रिलीज करने के लिए कनेक्शन पर हो सकता है

दरअसल, जावा में सुरक्षित पैटर्न को अपने ResultSet , Statement , और Connection (उस क्रम में) को finally ब्लॉक में बंद करना है जब आप उनके साथ किया जाता है, ऐसा कुछ:

 Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { // Do stuff ... } catch (SQLException ex) { // Exception handling stuff ... } finally { if (rs != null) { try { rs.close(); } catch (SQLException e) { /* ignored */} } if (ps != null) { try { ps.close(); } catch (SQLException e) { /* ignored */} } if (conn != null) { try { conn.close(); } catch (SQLException e) { /* ignored */} } } 

finally ब्लॉक में थोड़ा सुधार हो सकता है (रिक्त जांच से बचने के लिए):

 } finally { try { rs.close(); } catch (Exception e) { /* ignored */ } try { ps.close(); } catch (Exception e) { /* ignored */ } try { conn.close(); } catch (Exception e) { /* ignored */ } } 

लेकिन, फिर भी, यह बेहद क्रियान्वित है, इसलिए आप आम तौर पर शून्य-सुरक्षित सहायक विधियों में ऑब्जेक्ट को बंद करने के लिए एक सहायक वर्ग का उपयोग करते हैं और finally ब्लॉक कुछ ऐसा ही होता है:

 } finally { DbUtils.closeQuietly(rs); DbUtils.closeQuietly(ps); DbUtils.closeQuietly(conn); } 

और, वास्तव में, अपाचे कॉमन्स डीबीयूटील्स में एक DbUtils क्लास है जो ठीक से ऐसा कर रहा है, इसलिए अपनी खुद की लिखने की कोई आवश्यकता नहीं है।

उपयोग के बाद डेटाबेस / संसाधन ऑब्जेक्ट को बंद करना हमेशा बेहतर होता है finally ब्लॉक में कनेक्शन, परिणाम और कथन ऑब्जेक्ट को बंद करने के लिए बेहतर।

जावा 7 तक, इन सभी संसाधनों को finally ब्लॉक का उपयोग करके बंद करना होगा। यदि आप जावा 7 का उपयोग कर रहे हैं, तो संसाधनों को बंद करने के लिए आप निम्न प्रकार से कर सकते हैं।

 try(Connection con = getConnection(url, username, password, "org.postgresql.Driver"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(sql); ) { //statements }catch(....){} 

अब, कॉन, एसटीएमटी और आरएस ऑब्जेक्ट्स ट्रायल ब्लॉक का हिस्सा बन जाते हैं और जावा उपयोग के बाद इन संसाधनों को स्वचालित रूप से बंद कर देता है।

आशा है कि मैं सहायक था

हाँ। आपको परिणामस्वरूप, कथन और कनेक्शन को बंद करना होगा। यदि कनेक्शन एक पूल से आया है, तो इसे बंद करने से वास्तव में इसे पुन: उपयोग के लिए पूल में वापस भेज दिया गया है।

आपको इसे आम तौर पर finally{} ब्लॉक में करना पड़ता है, जैसे कि कोई अपवाद फेंका जाता है, तो आप इसे बंद करने का मौका भी प्राप्त कर सकते हैं।

आपके लिए इस संसाधन आवंटन / डीओलोकेशन की समस्या के बाद कई ढांचे पर विचार होगा। जैसे स्प्रिंग की जेडीबीसी टेम्पलेट अपाचे डीबीयूटील्स में परिणामसेट / कथन / कनेक्शन को बंद करने की पद्धति होती है, चाहे रिक्त या नहीं (और समापन पर अपवाद को पकड़ना), जो भी मदद कर सकता है

यह सिर्फ Statement और Connection को बंद करने के लिए पर्याप्त है ResultSet ऑब्जेक्ट स्पष्ट रूप से बंद करने की कोई आवश्यकता नहीं है।

जावा प्रलेखन java.sql.ResultSet बारे में कहते हैं:

एक ResultSet ऑब्जेक्ट स्टेटमेंट ऑब्जेक्ट द्वारा स्वचालित रूप से बंद हो जाता है, जब उस स्टेटमेंट ऑब्जेक्ट को बंद कर दिया जाता है, पुन: निष्पादित किया जाता है या अगले परिणाम को कई परिणामों के अनुक्रम से प्राप्त करने के लिए उपयोग किया जाता है।


धन्यवाद BalusC टिप्पणी के लिए: "मैं उस पर भरोसा नहीं होता। कुछ JDBC चालकों उस पर असफल।"

हां, आपको कनेक्शन बंद करना होगा। अन्यथा, डेटाबेस क्लाइंट आमतौर पर सॉकेट कनेक्शन और अन्य संसाधनों को खुले रखेगा।

दरअसल, यह सबसे अच्छा है अगर आप संसाधनों के साथ प्रयासों का उपयोग करते हैं और जब आप प्रयास ब्लॉक से बाहर निकलते हैं, तो जावा आपके सभी कनेक्शन बंद कर देगा।

आपको ऐसा ऑब्जेक्ट के साथ करना चाहिए जो ऑटोक्लोबल योग्य है।

 try (Connection connection = getDatabaseConnection(); Statement statement = connection.createStatement()) { String sqlToExecute = "SELECT * FROM persons"; try (ResultSet resultSet = statement.execute(sqlToExecute)) { if (resultSet.next()) { System.out.println(resultSet.getString("name"); } } } catch (SQLException e) { System.out.println("Failed to select persons."); } 

GetDatabaseConnection को कॉल बस बना दिया गया है इसे एक कॉल के साथ बदलें जो आपको एक जेडीबीसी एसक्यूएल कनेक्शन या पूल से कनेक्शन देता है।