मैं अपने ऐप के SQLite डीबी में एक टेबल जोड़ रहा हूं। मेरा सभी वाक्यविन्यास ठीक है, मुद्दा नहीं। लेकिन मुझे नई टेबल को ठीक तरह से बनाने में कुछ परेशानी हो रही है। मैंने नई टेबल जोड़ा ....SQLite डेटाबेस को कैसे अपडेट करें और सभी मौजूदा डेटा खोना नहीं है?
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE);
db.execSQL(CREATE_REQUESTS);
db.execSQL(CREATE_OVERRIDE);
}
मेरा निर्माण विधि पर। मेरे पास 3 टेबल हैं। जब मैंने संस्करण संख्या को अपडेट किया, तो मुझे एक त्रुटि मिली "तालिका अनुरोध (CREATE_REQUESTS का जिक्र करना) पहले से ही बनाया जा चुका है।" मेरी onUpgrade विधि पर एक नजर ...
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS contacts");
onCreate(db);
}
मुझे नेतृत्व में समझना महत्वपूर्ण है कि लाइन db.execSQL("DROP TABLE IF EXISTS contacts")
, जो onCreate विधि में मेरी DATABASE_CREATE तालिका को संदर्भित करता है, पुराने मेज, तो अगली पंक्ति, onCreate(db);
ड्रॉप करने के लिए इस्तेमाल किया जाता है इसे दोबारा शुरू करता है मैंने उस execSQL लाइन में अनुरोध नहीं जोड़े, जो त्रुटि के कारण हुआ। यहां मुद्दा है: मैं पहले से मौजूद दो तालिकाओं में डेटा खोना नहीं चाहूंगा। क्या कोई टेबल जोड़ने का कोई तरीका है जैसे मैं करने की कोशिश कर रहा हूं, और सभी पुराने डेटा को खोना नहीं है? धन्यवाद।
हम्म स्थापित ठीक ठीक काम करता है। मुझे लगता है कि मेरी चिंता यह है कि अगर आपने इसे अपग्रेड में किया है तो यह तब नहीं होगा जब कोई ऐप का उपयोग स्क्रैच से करता है, लेकिन मुझे लगता है कि जब तक मैं इसे ऑन्रेट विधि में डालता हूं तो भी इसका कोई बड़ा सौदा नहीं होता है। धन्यवाद! – JMRboosties
ऑन अपग्रेड केवल तभी बुलाया जाता है जब कोई मौजूदा ऐप अपग्रेड हो। यदि आप ऐप को स्क्रैच से शुरू करते हैं, तो आपको केवल क्रिएट पर कॉल प्राप्त होगा। – EboMike
इसका केवल तभी कॉल किया जाता है जब आप डेटाबेस संस्करण को बढ़ाते हैं। –