2011-11-01 3 views
5

मेरा एप्लिकेशन अपने सभी डेटा को एक SQLiteDatabase में प्रबंधित करता है जिसे कई धागे से एक्सेस किया जाता है।क्या मैं वर्तमान थ्रेड के लिए SQLite तालिका लॉक कर सकता हूं?

अभी मैं अपने सभी डीबी कॉल डेटाबेस पर सिंक्रनाइज़ कर रहा हूं।

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

समस्या या तो मुझे कभी-कभी मेरे एसक्यूएल कॉल लंबे समय तक (सिंक्रोनस ताले के कारण) के लिए स्टॉल करते हैं या मुझे एक त्रुटि मिलती है जब एक SQL कॉल संक्षिप्त अवधि में खुद को चलाने की कोशिश करता है जब मेरी एक तालिका कॉपी हो रही है ऊपर।

क्या मेरे लिए रीफ्रेश होने पर अन्य डेटाबेस से अपने डेटाबेस को लॉक करने के लिए कोई था, लेकिन संचालन ए, बी, सी, आदि को एक साथ चलने दें?

चीयर्स!

उत्तर

0

मुझे यकीन है कि आप क्या चाहते हैं ReadWriteLock है। असल में, यह आपके डेटाबेस पर दो अलग-अलग ताले रखता है, एक पढ़ने के लिए और एक लिखने के लिए। जबकि लिखने का ताला बंद है, कोई और पढ़ या लिख ​​सकता है। यदि कोई भी रीड लॉक लॉक किया गया है (किसी भी थ्रेड द्वारा), तो लिखने का लॉक लॉक करने में सक्षम नहीं होगा जब तक कि हर कोई पढ़ना समाप्त नहीं कर लेता है।

+0

यूप! यह वही है जो मैं खोज रहा था! मैं जो कर रहा था उसके लिए सिंक्रनाइज़ करने से बहुत बेहतर था। धन्यवाद! :) – isep

+0

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

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