जस्की के अनुरोध के अनुसार, लापता बिंदुओं को और जोड़ने के लिए
SQLite
डेटाबेस फ़ाइल डेटाबेस फ़ाइल में संग्रहीत है ।
कैच कंस्ट्रक्टर है
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
इसलिए जब डेटाबेस हेल्पर कंस्ट्रक्टर को name
(द्वितीय परम) के साथ बुलाया जाता है , तो प्लेटफ़ॉर्म यह चेक करता है कि डेटाबेस मौजूद है या नहीं और यदि डेटाबेस मौजूद है, तो उसे डेटाबेस फ़ाइल हेडर से संस्करण की जानकारी मिल जाती है और सही कॉल बैक ट्रिगर हो जाता है
जैसा कि पहले से ही पुराने उत्तर में समझाया गया है, अगर नाम वाला डेटाबेस मौजूद नहीं है, तो यह ट्रिगर हो जाता है onCreate
।
नीचे विवरण onUpgrade
उदाहरण के साथ मामले की व्याख्या करता है ।
कहते हैं, आपके पहले संस्करण के पास कंस्ट्रक्टर पासिंग संस्करण के साथ DatabaseHelper
(विस्तारित SQLiteOpenHelper
) था 1
और तब आपने नए स्रोत कोड के साथ एक उन्नत एप्लिकेशन प्रदान किया था 2
, जिसके बाद संस्करण बन गया , जब स्वचालित रूप से DatabaseHelper
इसका निर्माण हो जाता है , तो onUpgrade
फ़ाइल को पहले से मौजूद प्लेटफ़ॉर्म ट्रिगर से पहले ही मौजूद है, लेकिन संस्करण वर्तमान संस्करण से कम है जिसे आपने पास किया है।
अब आप कहते हैं कि आप db संस्करण के साथ अनुप्रयोग का तीसरा संस्करण देने की योजना बना रहे हैं 3
(db संस्करण तभी बढ़ाया जाता है जब डेटाबेस स्कीमा को संशोधित किया जाना है)। इस तरह के वृद्धिशील उन्नयन में, आपको एक बेहतर रखरखाव योग्य कोड के लिए प्रत्येक संस्करण से उन्नयन तर्क को लिखना होगा
उदाहरण छद्म कोड नीचे:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch(oldVersion) {
case 1:
//upgrade logic from version 1 to 2
case 2:
//upgrade logic from version 2 to 3
case 3:
//upgrade logic from version 3 to 4
break;
default:
throw new IllegalStateException(
"onUpgrade() with unknown oldVersion " + oldVersion);
}
}
break
मामले में गुम बयान पर ध्यान दें 1
और 2
। वृद्धिशील उन्नयन से मेरा यही अभिप्राय है।
कहें कि क्या पुराना संस्करण है 2
और नया संस्करण है4
, तो तर्क डेटाबेस 2
को 3
और फिर से अपग्रेड करेगा4
पुराने संस्करण है 3
और नया संस्करण है 4
, यह सिर्फ के लिए उन्नयन तर्क चलेंगे 3
को4