2012-01-07 13 views
6

मुझे इस समस्या को हल करने की आवश्यकता है।एंड्रॉइड एसक्यूएलएट ऑन कॉन्फ्लिक्ट अपडेट संभव है?

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

तो पता है कि मैं इस बड़े जड़ समस्या है: डी

आप समझ के रूप में मैं क्या तक पहुँचना चाहते हैं यह है:

मैं हमेशा डालने, अगर यह एक ही अद्वितीय कुंजी के साथ पहले से ही एक पंक्ति पाता है (संघर्ष) यह केवल मूल्यों को अद्यतन करेगा। यदि किसी फ़ील्ड के लिए यह मान नहीं ढूंढता है (मैं इसे ContentValues ​​में नहीं डालता) यह उन फ़ील्ड को अपडेट नहीं करेगा, लेकिन पुराने को रखें (सामान्य अपडेट क्वेरी की तरह जहां आप इसे अपडेट करने के लिए कॉलम नहीं डालते हैं)।

मेरी समस्या का समाधान करने के लिए मैं इन समाधानों tought:

  • संघर्ष अद्यतन पर (यह केवल काम करेंगे आप केवल 1 अद्वितीय क्षेत्रों है जब, यदि आप 2 या अधिक अद्वितीय क्षेत्रों कि संघर्ष फेंक है यह दुर्घटनाग्रस्त हो जाएगा)
  • असफल असफलता पर अद्यतन जहां यह हमेशा अद्यतन करने का प्रयास करता है। यदि यह विफल हो जाता है क्योंकि यह रिकॉर्ड से संबंधित पंक्ति नहीं ढूंढता है (यह अभी तक डीबी में मौजूद नहीं है) तो यह

किसी ने पहले ही इस समस्या के बारे में सोचा है और इसका समाधान है? या शायद हम समाधान ढूंढने का प्रयास कर सकते हैं :)

मुझे लगता है कि प्रदर्शन का एक अच्छा स्तर रखने के लिए चीजों को निम्न स्तर (डीबी स्तर) पर रखने का सबसे अच्छा तरीका है।

+0

आपको यहां अच्छे विचार मिलेंगे: http://stackoverflow.com/questions/418898/sqlite-upsert-not-insert-or-replace –

उत्तर

7

SQLite3 आधिकारिक दस्तावेज़ीकरण स्वचालित रूप से एक ऑन कॉन्फ्लिक्ट अद्यतन करने के लिए संभव नहीं है, लेकिन केवल एक प्रतिस्थापन है जो DELETE -> INSERT (नए मान) की तरह है।

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