2008-12-18 14 views
7

मैं sqlite3 के बारे में एक अजीब समस्या से मुलाकात की। मैंने खुले() विधि का उपयोग कर एक ही डेटाबेस फ़ाइल के विभिन्न कनेक्शन प्राप्त किए। कनेक्शन 1 लेनदेन शुरू करता है, और कनेक्शन 2 एक और लेनदेन शुरू करता है, जो एक तालिका के कई रिकॉर्ड अपडेट करना है। फिर कनेक्शन 1 लेनदेन प्रतिबद्ध करता है, उसके बाद कनेक्शन 2 इसके लेनदेन को प्रतिबद्ध करता है। लेकिन मैंने पाया कि कनेक्शन 2 का अद्यतन कमांड डेटाबेस में रिकॉर्ड को वास्तव में अद्यतन नहीं करता है। इस प्रक्रिया के दौरान कोई अपवाद नहीं फेंक दिया गया है। मुझे नहीं पता कि समस्या क्यों होती है। क्या कोई मुझे कारण बता सकता है?क्या एक ही स्क्लाइट के डेटाबेस के विभिन्न कनेक्शन एक साथ लेनदेन शुरू कर सकते हैं?

उत्तर

14

यदि आप SQLite दस्तावेज़ पढ़ते हैं, तो आप देखेंगे कि यह केवल पढ़ने के लिए एकाधिक कनेक्शन का समर्थन करता है, आप डेटाबेस को mulitple कनेक्शन से नहीं लिख सकते हैं, क्योंकि यह इसके लिए डिज़ाइन नहीं किया गया है।

http://www.sqlite.org/faq.html#q5

+1

हालांकि, आप दो समवर्ती लेखन लेनदेन कर सकते हैं, जो समस्या पैदा कर रहा है। –

+0

तो, यदि कोई लेनदेन है जो डेटाबेस में एक लेखन ऑपरेशन कर रहा है, तो कोई अन्य लेखन ऑपरेशन डेटाबेस को संशोधित नहीं कर सकता है, भले ही ये ऑपरेशन लेनदेन के भीतर हों या नहीं? – user26404

+0

क्या मैं एक चुनिंदा ऑपरेशन कर सकता हूं जब एक ही कनेक्शन एक ही समय में एक लिखने के ऑपरेशन (सम्मिलित, अद्यतन) कर रहा है? – user26404

5

जब तक आप अपने लेनदेन आरंभ करने के तत्काल शुरू उपयोग करते हैं, आप रोलबैक और उन्हें फिर से प्रयास करना होने के जोखिम को चलाते हैं। एक BEGIN कोई लॉकिंग नहीं करता है; बाद में अद्यतन या INSERT लॉक हो जाता है, और आपको यह देखने के लिए परिणाम कोड जांचना होगा कि वे विफल हो गए हैं या नहीं। इस पृष्ठ को transactions पर देखें और यह locks पर है।

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