2012-09-04 18 views
5

हाय सब मुझे पता था कि यह एक पुराना सवाल है लेकिन आज उत्सुक है। जैसा कि हम कनेक्शन जानते हैं। बंद भी तैयार हो जाएगा स्टेटमेंट (अगर मैं गलत हूं तो मुझे सही करें)। लेकिन अगर मैं कनेक्शन बंद करता हूं तो बंद करें स्टेटमेंटजेडीबीसी कनेक्शन बंद और तैयारस्टेटमेंट बंद

conn.close(); 
ps.close(); 

क्या मुझे एक नलपोइंटर अपवाद मिलेगा?

कोई कह रहा था कि आपके जेवीएम गति पर निर्भर करता है। कभी-कभी ps.close() आगे बढ़ेगा और conn.close से पहले बंद हो जाएगा और उसकी नौकरी खत्म हो जाएगी और इसलिए आपको नलपोइंटर नहीं मिलेगा।

आदेश है कि परीक्षण करने के लिए में, मैं कोड

conn.close(); 
Thread.sleep(5000);//I give 5s to conn.close to finish his work. should be enough 
ps.close(); 

संशोधित किया है लेकिन मैं nullpointer नहीं मिला।

तो मेरा सवाल यह है कि अगर मैं पहले और फिर पीएस को बंद कर देता हूं तो यहां क्या हुआ।

सभी को धन्यवाद।

उत्तर

4

JavaDoc Statement.close() के लिए कहता है:

एक Statement वस्तु पहले से ही बंद कर दिया है कोई प्रभाव नहीं है कि पर विधि close कॉलिंग।

मैं सुझाव दूंगा कि इसका मतलब है कि अगर आपका कथन Connection.close() पर कॉल द्वारा बंद कर दिया गया है तो कोई अपवाद नहीं करना चाहिए।

0

व्यवहार ड्राइवर कार्यान्वयन या कनेक्शन पूलर कार्यान्वयन के लिए विशिष्ट है। वे मूल रूप से अंतर्निहित कनेक्शन/कथन/परिणामसेट को सजाने और अपने राज्य का ट्रैक रखने के लिए। इसलिए, कार्यान्वयन प्राथमिक को बंद करने से पहले निर्भर वस्तुओं को बंद करना चुन सकता है। Primrose कनेक्शन पूलर अनधिकृत बयानों या परिणामों के बारे में चेतावनियों को मुद्रित करने के लिए प्रयुक्त होता है जब close() विधि Connection (जिसे पूल से कनेक्शन वापस करने के लिए ओवरराइड किया गया है) पर कॉल किया जाता है।

+0

जेडीबीसी विनिर्देश इस बारे में बहुत स्पष्ट है: कनेक्शन बंद करने से सभी आश्रित वस्तुओं को बंद कर दिया जाता है (कम से कम उपयोगकर्ता परिप्रेक्ष्य से; पूल के अंदर कथन पूलिंग के मामले में खुला रहता है, लेकिन उस कथन के लिए उपयोगकर्ता-हैंडल होना चाहिए व्यवहार करें जैसे यह बंद है)। पहले से बंद जेडीबीसी संसाधन (कनेक्शन, कथन, परिणाम आदि) को बंद करना कोई प्रभाव नहीं होना चाहिए (कोई त्रुटि नहीं, आदि)। –

+0

मैं पूलर्स द्वारा लौटाए गए सजाए गए कनेक्शन के बारे में बात कर रहा था और इस तरह के सजाए गए कनेक्शन पर एक करीबी कॉल अंतर्निहित भौतिक कनेक्शन को बंद नहीं करता है। हम उस अधिकार से सहमत हैं? अब, पूलर्स इस कनेक्शन से संबंधित बयानों/परिणामों की जांच कर सकते हैं और कनेक्शन पर बंद कॉल में बंद कर सकते हैं, है ना? मुझे उम्मीद है कि मैं आपको सही मिला। – Vikdor

1

वक्तव्य इंटरफ़ेस का जावाडोक अनुसार

close 
void close() 
      throws SQLExceptionReleases this Statement object's database and JDBC resources immediately instead of waiting for this to happen when it is automatically closed. It is generally good practice to release resources as soon as you are finished with them to avoid tying up database resources. 
**Calling the method close on a Statement object that is already closed has no effect.** 

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

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