2011-11-24 14 views
14

असल में मैं (अपवाद हैंडलिंग, आदि अनदेखी) हैक्या मैं इसे डर्बी (जेडीबीसी) में करने से पहले लेनदेन में बयान बंद कर सकता हूं?

connection.setAutoCommit(false); 

Statement statement1 = connection.createStatement(); 
statement1.executeUpdate("..."); 
statement1.close(); 

Statement statement2 = connection.createStatement(); 
statement2.executeUpdate("..."); 
statement2.close(); 

connection.commit(); 

अगर मैं सही ढंग से समझ, क्योंकि सभी यह वास्तव में करता है मुक्त जीसी के लिए संसाधनों है कि यह किसी भी प्रभाव नहीं होना चाहिए। Especially with Derby: जब आपको अब उनकी आवश्यकता नहीं होती है तो आपको वक्तव्य, परिणामसेट और कनेक्शन को स्पष्ट रूप से बंद करना चाहिए। डर्बी से कनेक्शन एक आवेदन के बाहर संसाधन हैं, और कचरा कलेक्टर स्वचालित रूप से उन्हें बंद नहीं करेगा।

लेकिन यह लेन-देन साथ किसी भी मुद्दे का कारण होगा? मुझे विश्वास नहीं है कि लेनदेन वक्तव्य पर निर्भर करता है। क्या कोई इसे पुष्टि कर सकता है?

+0

ऐसा लगता है, अगर आप कोई स्टेटमेंट बंद करते हैं, तो _transaction_ अभी भी डीबी पक्ष (प्रतिबद्ध या रोलबैक के लिए प्रतीक्षा) पर खुला है। कनेक्शन पर एक प्रतिबद्ध या रोलबैक आदेश जारी होने पर यह केवल समाप्त/बंद होता है। क्या मैं सही हू? – ADTC

उत्तर

15

बिल्कुल, आप उन्हें बंद कर सकते हैं, और आप ऐसा करना चाहिए।

+2

"चाहिए" –

+0

के लिए +1 मैं सहमत हूं। लेकिन क्या लेनदेन समाप्त हो जाने से पहले या लेनदेन पूरा होने के बाद यह हो सकता है? –

6

सामान्य शब्दों में, एक बार एक Statement निष्पादित किया जाता है, अंतर्निहित डेटा स्रोत/डेटाबेस सफल निष्पादन सुनिश्चित करने के लिए जिम्मेदार है। Statement.executeXXX आमंत्रणों में SQLException को फेंकने की उम्मीद में किसी भी विफलता की उम्मीद है। और किसी भी सफल निष्पादन के परिणामस्वरूप डेटाबेस इन अस्थायी कार्यक्षेत्र में इन अद्यतनों को ट्रैक कर देगा। लेनदेन को प्रतिबद्ध करना केवल यह सुनिश्चित करता है कि बयानों के कारण अपडेट अस्थायी कार्यक्षेत्र से टिकाऊ स्टोर पर लिखे जाएं। यह अक्सर/सभी डेटाबेस में मामला है।

यह एक Statement वस्तु बंद करने के लिए एक बार आप इसकी ज़रूरत नहीं है, लेन-देन में कोई साइड इफेक्ट का सामना किए बिना इसलिए सुरक्षित है।

0

बेशक यह लेन-देन करने से पहले बयान बंद करने के लिए सुरक्षित है। आपको कोडरंच और जेडीबीसी लेनदेन tutorial से Closing Statement object prior to committing पढ़ना होगा।

+2

मैंने वास्तव में दोनों किया था। जावा रंच टिप्पणियां "मुझे विश्वास है" से शुरू होती हैं जो पुष्टि नहीं है, और कोई भी इसे बढ़ावा नहीं देता है, चर्चा एक स्पर्शरेखा पर चला गया। प्रतिबद्धता के बाद, जेडीबीसी ट्यूटोरियल आखिरकार ब्लॉक में वक्तव्य बंद कर देता है। और यदि आप पहले वक्तव्य बंद करते हैं तो क्या होता है इसका कोई उल्लेख नहीं है। तो कृपया अपनी टिप्पणियों में सावधान रहें, यह स्पष्ट नहीं है, और न ही उन संदर्भों में से किसी एक में कहा गया है ... –

1

हाँ। लेनदेन करने से पहले यह एक अच्छा अभ्यास और करीबी बयान के दृष्टिकोण है।

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