Intereting Posts
फेसबुक ऐप का अनुरोध अधिसूचना मोबाइल वेब एप के लिए फेसबुक आईओएस ऐप में दिखाई नहीं दे रहा है ऑब्जेक्ट सी / आईओएस में रूबी की विधि की पहचान के बराबर UICollectionView लेआउट परिवर्तनों के लिए डिफ़ॉल्ट एनिमेशन अवधि क्या है? कैसे तेजी से जीमेल एपीआई का उपयोग कर ईमेल भेजें "एक्सप्रेशन 7 में एक्सचेंज मास्क बदलकर केवल बकाया परत में, कोई प्रभाव नहीं होगा" आईओएस न्यूजस्टैंड: पुश नोटिफिकेशन पृष्ठभूमि में एप लॉन्च नहीं करता है सेंड सिंक्रोनस के बारे में चेतावनी: लौटते हुए रिस्पांस: त्रुटि: नापसंद किया गया है: आईओएस में पहली बार 9- होम बटन प्रेस स्प्राइटकिट एसकेवी्यू में EXC_BAD_ACCESS कोड = 1 का कारण बनता है प्रतिक्रिया मूल निवासी FBSDK में एक्सेसटोकन के साथ समस्याएं AVAudioPlayer गलत फ़ाइल अवधि आईओएस 10 हो रही है UIBezierPath के साथ एक रेखा खींचना इन-हाउस बिजनेस आईओएस ऐप्स वितरित करना प्रतिक्रिया दें मूल ऐप कुछ दिनों के बाद आईओएस पर शुरू नहीं होता है UISearchBar को अनुकूलित करें: खोज पट्टी के नीचे 1px काली रेखा से छुटकारा पाने की कोशिश कर रहा है Xcode निष्पादन योग्य अमान्य अधिकार के साथ हस्ताक्षर किए गए थे

कैसे लॉक sqlite3 डेटाबेस डीबग करने के लिए

मैं आईओएस पर एक आवेदन पत्र लिख रहा हूँ जो कि फाईलडाटाबेस द्वारा लिखे गए sqlite3 का उपयोग करता है। मैं इस समस्या में चल रहा हूं कि कुछ बिंदु पर, मेरा प्रोग्राम FMDatabase पुस्तकालयों के अंदर एक पाश में फंस गया है, विशेष रूप से, एक फ़ंक्शन जो sqlite3_step को कॉल करता है और पता चलता है कि डेटाबेस व्यस्त है, फिर से बार-बार फिर से प्रयास करता है

मैं सामान्य डिबगिंग टूल और सुझावों की तलाश कर रहा हूं, क्योंकि यहां मेरा पूरा सेटअप देना बहुत अधिक होगा कुछ चीजें जो परिणामस्वरूप हो सकती हैं, मैंने एक डेटाबेस को एक डाटाबेस हैंडल खोल दिया है जो पहले से ही दूसरे थ्रेड में एक हैंडल है sqlite3_threadsafe () 2 देता है, इसलिए मैं इसकी सक्षम पता है मैंने यह नया कनेक्शन बहुत सरल चयन और अपडेट स्टेटमेंट बना कर परीक्षण किया है। जब मैं अपना कार्यक्रम चलाता हूं, और जब डेटाबेस पर अपडेट चलाने की कोशिश करता है, तो मैं फंस जाता हूं।

अद्यतन कथन जो कि मेरा प्रोग्राम स्वयं बनाता है, गलती नहीं है, क्योंकि जब मैं दो कनेक्शन नहीं खोलता, तो यह क्वेरी ठीक चलती है। फिर भी, मैं यह देखने में विफल हूं कि मैं गलत कहां जा रहा हूं …

किसी भी मदद या सुझाव जहां मैं गलत हो सकता है काफी सराहना की जाएगी।

Solutions Collecting From Web of "कैसे लॉक sqlite3 डेटाबेस डीबग करने के लिए"

एसक्यूलाइट एक लेखन ऑपरेशन के दौरान पूरे डेटाबेस को ताले लगाता है (यानी जब किसी भी मेज पर एक लेखन हो रहा है, कोई अन्य लिखना, किसी भी मेज पर कहीं भी एक ही समय में हो सकता है)। कुछ डेटाबेस तालिका स्तर के ताले के माध्यम से समवर्ती लिखते हैं, या कभी-कभी पंक्ति-स्तर के ताले इसके विपरीत SQLite के कार्यान्वयन के लिए, एक तालिका-स्तर ताला मूल रूप से इसका मतलब है कि जब आप किसी दिए गए तालिका में डेटा लिख ​​रहे हैं, तो कोई अन्य थ्रेड उसी तालिका में किसी भी रिकॉर्ड पर लिख सकता है, (हालांकि, अन्य तालिकाओं के लिए लिखता है कुछ परिस्थितियों में, एक साथ होते हैं)। इसी प्रकार, पंक्ति-स्तर के ताले इसे आगे भी लेते हैं, और केवल आवश्यक पंक्तियों को लॉक होने की अनुमति देते हैं, जो एकाधिक तालिका से एक ही मेज पर समवर्ती लिखने की अनुमति देता है। यहां पर विचार यह है कि आप लिखने वाले ऑपरेशन के लिए लॉक करने के लिए आवश्यक डेटा की मात्रा को कम करना है, जो संपूर्ण डाटाबेस में संभवतः समवर्ती लेखन की मात्रा को प्रभावी ढंग से बढ़ाता है, और आपके कार्यान्वयन के आधार पर / आप अपने डेटाबेस का उपयोग कैसे करते हैं, यह काफी बढ़ाता है

अब, आपके प्रश्न पर वापस …

तथ्य यह है कि SQLite थ्रेडसेफ का मतलब यह नहीं है कि एकाधिक थ्रेड इसे एक साथ लिख सकते हैं – इसका मतलब है कि इसमें एकाधिक थ्रेड्स से पहुंच से निपटने का एक तरीका है – जो कि (ए) टाइमआउट / रिट्रीज की अनुमति है, और (बी) वापस करने के लिए एक उपयोगी त्रुटि (एसक्यूलाइट: व्यस्त) जब एक ताला वर्तमान में डेटाबेस पर रखता है। यही है, थ्रेडसेफ का मतलब, "कई थ्रेड इस डेटा को एक ऐसे तरीके से एक्सेस कर सकते हैं, जो एक साथ पहुंच के कारण डेटा भ्रष्टाचार का परिणाम नहीं देगा।"

असल में, किसी भी कोड में कहीं, एक थ्रेड इसकी अद्यतन करने की कोशिश कर रहा है इससे पहले कि एक और थ्रेड ने डेटाबेस पर अपना लॉक जारी किया है। यह SQLite के साथ एक सामान्य बाधा है, क्योंकि लेखकों / दस्तावेज आपको बताएंगे कि SQLite एक विजेता की तरह संगामिति को संभाल सकता है वास्तविकता यह है कि क्या SQLite "सहस्राब्दी समर्थन" मानता है कि बहुत तेजी से होने की कोशिश करने के लिए मात्रा है, जिससे कि डाटाबेस पर ताला लगाया जा सकता है केवल बहुत ही कम समय के लिए आयोजित किया जाता है, और इसलिए समय समाप्ति के पहले रिलीज होने से पहले डेटाबेस को लॉक किया जाता है बहुत सारे मामलों में, यह सिर्फ ठीक काम करता है और आपके रास्ते में कभी नहीं जाता। हालांकि, बहुत ही अल्पकालिक लॉक वाले वास्तव में समान नहीं हैं, जैसा कि वास्तव में एकाधिक थ्रेड से समवर्ती लेखन की अनुमति है।

इसके बारे में सोचें कि आईओएस मल्टीटास्किंग कैसे करता है (कम से कम आईओएस 5 के रूप में, जब मैं यह लिख रहा हूं) – वास्तव में यह क्या कर रहा है, अन्य एप्लिकेशन को रोकते हैं, और उनके पास वापस आ रहे हैं। इसका असर है कि (ए) कम CPU उपयोग के कारण बैटरी जीवन बहुत बेहतर है, और (बी) आपको इसे लॉन्च करने पर हर बार स्क्रैच से ऐप शुरू करना नहीं पड़ता है। ये बहुत अच्छा है, लेकिन आईओएस में इस्तेमाल किए गए वास्तविक शब्द "मल्टीटास्किंग" को तकनीकी रूप से दूसरे वातावरण (यहां तक ​​कि मैक ओएस एक्स) में "मल्टीटास्किंग" के रूप में एक ही बात का अर्थ नहीं है।

SQLite उसी तरह है क्या उनके पास "संगामी" समर्थन है? ठीक तरह से, लेकिन जिस तरह से वे "concurrency" शब्द को परिभाषित करते हैं, वैसे ही डीबी की बाकी दुनिया "संगामिति" को परिभाषित करती है।

कोई भी वास्तव में गलत नहीं है, लेकिन ऐसे मामलों में, यह कार्यान्वयन भ्रम को जोड़ता है