2011-06-15 9 views
9

ट्यूटोरियल "Using Prepared Statements" में यह कहता है कि उन्हें हमेशा बंद होना चाहिए। मान लीजिए मेरे पास एक समारोह हैजावा तैयार किए जाने वाले समय को कब बंद किया जाना चाहिए?

getPrice() { 
} 

कि मुझे प्रति सेकेंड कई बार कॉल करने की उम्मीद है। क्या यह विधि प्रत्येक एकल विधि कॉल के साथ तैयार किए गए स्टेटमेंट को खोलना और बंद करना चाहिए? यह बहुत अधिक उपर की तरह लगता है।

उत्तर

13

सबसे पहले, PreparedStatement कभी खोले नहीं जाते हैं। यह सिर्फ एक तैयार Statement है जिसे निष्पादित किया गया है। बयान आरडीबीएमएस को भेजा जाता है जो PreparedStatement द्वारा संकलित SQL कथन निष्पादित करता है। एसक्यूएल कथन से कनेक्शन एसक्यूएल पूछताछ की अवधि के दौरान खोला जाना चाहिए और जब कोई अन्य आरडीएमएस कॉल की आवश्यकता नहीं होती है तो बंद कर दिया जाना चाहिए।

आप भेज सकते हैं कई Statement/PreparedStatement के रूप में आपके द्वारा दी गई की आवश्यकता होती है कि आप अंत में बंद अपने ResultSet और PreparedStatement एक बार आप उन लोगों के साथ पूरा कर रहे हैं और उसके बाद आरडीबीएमएस कनेक्शन बंद।

0

ट्यूटोरियल में उदाहरण के रूप में आपको अपने सभी प्रश्नों के बाद इसे बंद करना चाहिए।

एक बार बयान बंद होने के बाद आरडीएमएस आपके कथन से जुड़े सभी संसाधनों को जारी कर सकता है। इस प्रकार इसका उपयोग करने के लिए आपको एक ही कथन को फिर से तैयार करना होगा।

0

मुझे लगता है कि, प्रत्येक डेटाबेस इंटरैक्शन के बाद, कथन जैसे प्रत्येक घटक, कनेक्शन को छोड़कर परिणाम बंद होना चाहिए, यदि आप अधिक ऑपरेशन करते हैं।

और चिंता करने की कोई आवश्यकता नहीं है, अगर आप बार-बार तैयार कथन तैयार कर रहे हैं, क्योंकि आप बार-बार एक ही कथन का उपयोग करेंगे, तो कोई प्रदर्शन नहीं होगा।

13

क्या यह विधि प्रत्येक विधि कॉल के साथ तैयार किए गए स्टेटमेंट को खोलना और बंद करना चाहिए?

यदि आप विधि के भीतर PreparedStatement ऑब्जेक्ट बना रहे हैं, तो आपको इसके साथ पूरा करने के बाद इसे बंद करना होगा। आप एकाधिक निष्पादन के लिए PreparedStatement ऑब्जेक्ट का पुन: उपयोग कर सकते हैं, लेकिन एक बार जब आप इसके साथ काम कर लेंगे, तो आपको इसे बंद करना होगा।

ऐसा इसलिए है, हालांकि सभी स्टेटमेंट ऑब्जेक्ट्स (प्रीपेर्डस्टेटमेंट्स सहित) को Connection.close() पर आक्रमण करने पर बंद किया जाना चाहिए, यह शायद ही कभी मामला है। विशेष रूप से ओरेकल के कुछ जेडीबीसी ड्राइवरों में, कनेक्शन कनेक्शन बंद करने में असमर्थ होगा यदि कनेक्शन ने परिणामसेट और स्टेटमेंट ऑब्जेक्ट्स को बंद कर दिया है। इसका मतलब यह होगा कि, इन ड्राइवरों पर:

  • आपको कभी भी प्रीपेयरस्टेटमेंट ऑब्जेक्ट का संदर्भ खोना नहीं चाहिए। यदि आप करते हैं, तो कचरा संग्रह होने तक कनेक्शन बंद नहीं होगा। यदि आप विभिन्न एसक्यूएल स्टेटमेंट्स के लिए प्रीपेयरस्टेटमेंट इंस्टेंस का पुन: उपयोग कर रहे हैं, तो इसे भूलना आसान है।
  • आपको आवश्यकता होने के बाद आपको तैयार किए गए स्टेटमेंट को बंद करना चाहिए। केवल तब कनेक्शन.क्लोज़() वास्तव में भौतिक कनेक्शन को फाड़ सकता है।
0

हाँ .. यदि आप तैयार वक्तव्य संख्या बना रहे हैं तो कोई समस्या नहीं है, क्योंकि आप सभी स्थानों पर एक ही कथन का उपयोग करेंगे।प्रदर्शन

धन्यवाद

के बारे में कोई अवलोकन करने की आवश्यकता नहीं है
संबंधित मुद्दे