2010-11-26 6 views

उत्तर

26

मूल रूप से यह ठीक है, लेकिन जब से तुम कोड प्रदान नहीं किया है, मैं तो बस के लिए यह

पहले 2 संभव तरीके पोस्ट कर सकते हैं:

// In your content provider 
public Uri insert(...) { 
    long insertId = db.insert(...); 

    if(insertId == -1) { 
     // insert failed, do update 
     db.update(...); 
    } 
} 

दूसरा:

public Uri insert(...) { 
    long insertId = db.insertWithOnConflict(table, null, values, SQLiteDatabase.CONFLICT_REPLACE) 

    if(insertId == -1) { 
     // insert and update/replace failed 
    } 
} 

चेक आउट आगे पैरामीटर पर संदर्भ के लिए SQLiteDatabase। ज्यादातर मामलों में अंतिम विधि पर्याप्त होनी चाहिए, जब तक कि आप पंक्ति में मौजूद न होने पर केवल कुछ फ़ील्ड अपडेट होने चाहिए और यदि सभी फ़ील्ड नहीं हैं तो यह आवश्यक है।

डालने के लिए सबसे उपयोगी आवश्यकता WithOnConflict हो सकता है, कि आप एक पंक्ति डाल सकते हैं और यदि यह पहले से मौजूद है, तो सम्मिलित करें और इसके बजाय पहले से मौजूद पंक्ति की उरी/प्राथमिक कुंजी वापस कर दें।

5

यह आपकी पसंद है जो आप अपने ओवरराइड तरीकों से लिखते हैं। तो हाँ, यह ठीक है।

मुझे नहीं पता कि आप क्या करने का प्रयास कर रहे हैं, लेकिन आप SQLiteDatabase की replace() विधि पर भी एक नज़र डालना चाहते हैं। शायद यह आपकी आवश्यकताओं के अनुरूप बेहतर है।

+0

ठीक है मेरी समस्या यह है कि मुझे यह जांचने की आवश्यकता है कि कोई पंक्ति मौजूद है या नहीं, कॉलम ए में एक निश्चित मान है (ए अद्वितीय कुंजी नहीं है)। यदि हां मुझे इस पंक्ति को अद्यतन करने की आवश्यकता है। – Mak

+0

यदि अन्यथा मुझे एक नई पंक्ति बनाने की आवश्यकता है .... – Mak

+1

करने का सबसे अच्छा तरीका क्या है आपके पास ऐसा करने के 2 तरीके हैं: 1. प्रतिस्थापित करें (यदि पंक्ति मौजूद नहीं है, तो यह इसे सम्मिलित करती है; यदि यह मौजूद है, यह इसे हटा देता है और नए को सम्मिलित करता है); 2. पंक्ति डालने का प्रयास करें ... यदि सफल नहीं हुआ (अर्थात् पंक्ति पहले से मौजूद है), इसे अपडेट करें। इसलिए यदि आपको पुरानी पंक्ति (कुछ निश्चित कॉलम मान की तरह) से कुछ चाहिए, तो सम्मिलित करें + अपडेट का उपयोग करें। यदि नहीं, तो प्रतिस्थापित करें (आप पुरानी पंक्ति से सभी डेटा खो देंगे)। – Edi

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