आप सामान्य उपयोग Connection.commit()
में होना चाहिए और लेनदेन करने के लिए Connection.setAutoCommit(true)
नहीं, जब तक कि आप ऑटोकॉमिट के 'लेनदेन प्रति कथन' मॉडल में लेनदेन का उपयोग करने से स्विच नहीं करना चाहते हैं।
उस ने कहा, लेनदेन में Connection.setAutoCommit(true)
पर कॉलिंग लेनदेन करेगा (यदि ड्राइवर जेडीबीसी 4.1 स्पेक की धारा 10.1.1 के साथ शिकायत है)। लेकिन आपको वास्तव में ऐसा करना चाहिए यदि आप उसके बाद ऑटोकॉमिट में रहना चाहते हैं, क्योंकि कनेक्शन पर ऑटोकॉमिट को सक्षम/अक्षम करने से कनेक्शन पर अधिक ओवरहेड हो सकता है (उदाहरण के लिए क्योंकि इसे लेनदेन प्रबंधकों के बीच स्विच करने की आवश्यकता है, अतिरिक्त चेक करें , आदि)।
आपको Connection.commit()
का भी उपयोग करना चाहिए और देशी SQL कमांड COMMIT
का उपयोग नहीं करना चाहिए।
नोट:: जैसा कि कनेक्शन के दस्तावेज में विस्तृत जानकारी दी जब एक कनेक्शन को विन्यस्त, JDBC अनुप्रयोगों appropritate कनेक्शन विधि ऐसे setAutoCommit या setTransactionIsolation के रूप में इस्तेमाल करना चाहिए। जेडीबीसी विधि उपलब्ध होने पर अनुप्रयोगों को कनेक्शन की कॉन्फ़िगरेशन को बदलने के लिए सीधे SQL आदेशों का आह्वान नहीं करना चाहिए।
बात यह है कि commit()
और SetAutoCommit(boolean)
तरह आदेशों ResultSets
बंद करने और बंद करने या Statements
रीसेट करने की तरह वापस जमीन में अधिक काम कर सकते हैं, है। SQL कमांड COMMIT
का उपयोग करके इसे बाईपास कर दिया जाएगा और संभावित रूप से आपके ड्राइवर/कनेक्शन को गलत स्थिति में लाया जाएगा।
स्रोत
2012-05-05 08:08:18
वे विभिन्न उद्देश्यों के लिए अलग-अलग उपकरण हैं। एक दूसरे की तुलना में "बेहतर" या "अधिक सही" नहीं है। – Affe
नेटवर्क पर प्रतिबद्ध क्लाइंट का उपयोग करते समय नए रिकॉर्ड नहीं देख पा रहे थे, फिर भी वे अपने परिणाम को रीफ्रेश कर रहे थे, लेकिन जब ऑटोोकॉमीट सत्य पर सेट किया गया, तो यह ठीक काम कर रहा है, यह मेरी समस्या है। – Motasem
यह प्रश्न दो विधियों के बारे में गलतफहमी दिखाते हैं। जैसे अफफी ने कहा, वे किसी भी तरह से एक ही बात नहीं कर रहे हैं। जब ऑटो प्रतिबद्ध मोड सक्षम होता है, तो प्रत्येक कथन स्वचालित रूप से प्रतिबद्ध होता है। जब यह सक्षम हो जाता है, तो लेन-देन पूरी तरह से शुरू होते हैं, और प्रतिबद्ध() को वास्तव में उन्हें प्रतिबद्ध करने के लिए बुलाया जाना चाहिए (भले ही लेनदेन स्पष्ट रूप से प्रारंभ नहीं किया गया हो)। प्रतिबद्ध() एक खुले लेनदेन करता है। setAutoCommit यह निर्धारित करता है कि लेनदेन पूरी तरह से या स्पष्ट रूप से शुरू किया गया है या नहीं। – Corbin