2012-06-13 14 views
18

मैं ओरेकल से कनेक्ट करने के लिए जेडीबीसी के साथ काम कर रहा हूं। मैंने connection.setAutoCommit(false) बनाम connection.setAutoCommit(true) का परीक्षण किया और परिणाम अपेक्षित थे।जेडीबीसी कनेक्शन डिफ़ॉल्ट ऑटो कॉमिट व्यवहार

डिफ़ॉल्ट कनेक्शन के अनुसार autoCommit(true) के रूप में काम करना चाहिए [अगर मैं गलत हूं तो मुझे सही करें], लेकिन connection.commit() तक रिकॉर्ड में से कोई भी रिकॉर्ड नहीं किया जा रहा है। डिफ़ॉल्ट व्यवहार के बारे में कोई सलाह?

String insert = "INSERT INTO MONITOR (number, name,value) VALUES (?,?,?)"; 

conn = connection; //connection details avoided 
preparedStmtInsert = conn.prepareStatement(insert); 
preparedStmtInsert.execute(); 

conn.commit(); 
+1

क्या आप वह कोड दिखा सकते हैं जिसका उपयोग आपने वास्तव में किया था जहां यह काम नहीं करता था। ऑटोकॉमिट केवल कथन निष्पादित होने के बाद होता है। – Ben

+0

क्या आप 'कनेक्शन विवरण से बचने वाले' अनुभाग में कुछ भी कर रहे हैं जो ऑटोोकॉमिट सेटिंग्स को प्रभावित करने के लिए कुछ भी करता है? –

+0

आपने सबसे दिलचस्प हिस्सा पोस्ट नहीं किया - कोड जो कनेक्शन बनाता है;) – npe

उत्तर

20

Oracle JDBC documentation से:

जब एक कनेक्शन बनाया जाता है, यह स्वतः-मोड में है। इसका अर्थ है कि प्रत्येक व्यक्तिगत SQL कथन को लेनदेन के रूप में माना जाता है और स्वचालित रूप से इसे निष्पादित करने के बाद सही किया जाता है। (अधिक सटीक, डिफ़ॉल्ट होने के लिए एक SQL कथन के लिए डिफ़ॉल्ट है जब यह पूरा हो जाता है, जब इसे निष्पादित नहीं किया जाता है। एक कथन पूरा हो जाता है जब इसके परिणाम सेट के सभी और अद्यतन गणना पुनर्प्राप्त की गई हैं। लगभग सभी मामलों , तथापि, एक बयान पूरा हो गया है, और इसलिए प्रतिबद्ध, सही होने के बाद यह क्रियान्वित किया जाता है)

दूसरी बात यह है -। आप कनेक्शन निर्माण विवरण लोप, तो मैं बस अनुमान लगा रहा हूँ - अगर आप कुछ ढांचे का उपयोग कर रहे हैं, या डेटासोर्स या कनेक्शन पूल से कनेक्शन प्राप्त कर रहे हैं, autocommit को उन ढांचे/पू द्वारा off चालू किया जा सकता है ls/datasources - समाधान डिफ़ॉल्ट सेटिंग्स में कभी भरोसा नहीं करना है ;-)

+0

तो क्या मुझे इसे डिफ़ॉल्ट रूप से लेना चाहिए सभी मामलों में autocommit सच के समान नहीं हो सकता है। [जावा में डिफ़ॉल्ट बनाम सार्वजनिक जैसे कुछ]? – stackex

+0

डिफ़ॉल्ट एक ही होना चाहिए (autocommit = true) क्योंकि जेडीबीसी स्पेक कहता है। हालांकि, जेडीबीसी स्पेक ढांचे, कनेक्शन पूल और डेटा स्रोतों पर लागू नहीं होता है। उदाहरण के लिए, जब जेबॉस में डेटासॉर को परिभाषित करते हैं तो आप डेटासोर्स एक्सएमएल फ़ाइल में फोकस करने के लिए ऑटोकॉमिट को स्पष्ट रूप से सेट कर सकते हैं, और पूल से प्राप्त कनेक्शन आपको डिफ़ॉल्ट रूप से बंद कर देंगे। – npe

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