۱۳۹۴/۱۱/۲۹, ۰۱:۰۹ ق.ظ
(آخرین تغییر در ارسال: ۱۳۹۴/۱۱/۲۹, ۰۱:۱۴ ق.ظ توسط mahdi10539.)
آموزش نحوه بروزرسانی Database برنامه به نسخه (های) جدید
در این آموزش سعی داریم تا یکی از روش های بروزرسانی Database برنامه به نسخه های جدید رو بر مبنای آموزش های GOOGLE IO توضیح بدیم که به روش
Cascading Database Updates معروف هستش
در این روش هر نسخه Database برنامه دارای نام و شماره مخصوص بخود هستش
مثلا :
کد پیاچپی:
VER_LAUNCH = 21
بعد از اون میایم و تمامی نسخه های ای که داریم رو در کلاسی که از SQLiteOpenHelper extend کردیم تعریم می کنیم به این صورت
کد پیاچپی:
private static final int VER_LAUNCH = 21;
private static final int VER_SESSION_FEEDBACK_URL = 22;
private static final int VER_SESSION_NOTES_URL_SLUG = 23;
که ما آونها رو در بالا تعریف کردیم
بعد از آن میایم و یک متغییر کنترلی دیگه تعریف میکینم بنام
کد پیاچپی:
private static final int DATABASE_VERSION = VER_SESSION_NOTES_URL_SLUG;
حالا میایم در کلاس Extend شده از SQLiteOpenHelper در متد OnUpgrade کد های زیر رو مینویسیم
کد پیاچپی:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
int version = oldVersion;
switch (version) {
case VER_LAUNCH:
// Version 22 added column for session feedback URL.
db.execSQL("ALTER TABLE " + Tables.SESSIONS + " ADD COLUMN "
+ SessionsColumns.SESSION_FEEDBACK_URL + " TEXT");
version = VER_SESSION_FEEDBACK_URL;
case VER_SESSION_FEEDBACK_URL:
// Version 23 added columns for session official notes URL and slug.
db.execSQL("ALTER TABLE " + Tables.SESSIONS + " ADD COLUMN "
+ SessionsColumns.SESSION_NOTES_URL + " TEXT");
db.execSQL("ALTER TABLE " + Tables.SESSIONS + " ADD COLUMN "
+ SessionsColumns.SESSION_SLUG + " TEXT");
version = VER_SESSION_NOTES_URL_SLUG;
}
Log.d(TAG, "after upgrade logic, at version " + version);
if (version != DATABASE_VERSION) {
Log.w(TAG, "Destroying old data during upgrade");
db.execSQL("DROP TABLE IF EXISTS " + Tables.BLOCKS);
// ... delete all your tables ...
onCreate(db);
}
حال قسمتهای مختلف کد بالا رو توضیح میدیم
کد پیاچپی:
int version = oldVersion;
بعد از آن با استفاده از دستور Switch یکی یکی نسخه ها رو بررسی و بروزرسانی های مورد نیاز هر نسخه رو اعمال می کنیم
کد پیاچپی:
case VER_LAUNCH:
// Version 22 added column for session feedback URL.
db.execSQL("ALTER TABLE " + Tables.SESSIONS + " ADD COLUMN "
+ SessionsColumns.SESSION_FEEDBACK_URL + " TEXT");
version = VER_SESSION_FEEDBACK_URL;
برای مثال: در کد بالا گفته شده که اگر نسخه قدیم Database نسخه 1 یا VER_LAUNCH بود
بیا و تغییراتی رو که در نسخه 2 برنامه بر روی Database انجام دادم بر روی نسخه 1 اعمال کن و در نهایت نسخه فعلی رو به 2 تغییر بده
کد پیاچپی:
اعمال تغییرات برو روی Database قدیمی ( نسخه 21)
// Version 22 added column for session feedback URL.
db.execSQL("ALTER TABLE " + Tables.SESSIONS + " ADD COLUMN "
+ SessionsColumns.SESSION_FEEDBACK_URL + " TEXT");
کد پیاچپی:
تغییر نسخه Database فعلی برنامه به نسخه 22
version = VER_SESSION_FEEDBACK_URL;
خوب. حالا که نسخه Database برنامه به نسخه 22 یا VER_SESSION_FEEDBACK_URL تغییر کرده
این بار نوبت به تغییر نسخه Database برنامه به نسخه 23 میرسه
کد پیاچپی:
case VER_SESSION_FEEDBACK_URL:
// Version 23 added columns for session official notes URL and slug.
db.execSQL("ALTER TABLE " + Tables.SESSIONS + " ADD COLUMN "
+ SessionsColumns.SESSION_NOTES_URL + " TEXT");
db.execSQL("ALTER TABLE " + Tables.SESSIONS + " ADD COLUMN "
+ SessionsColumns.SESSION_SLUG + " TEXT");
version = VER_SESSION_NOTES_URL_SLUG;
در کد بالا دقیقا مثل روش قبل دوباره میایم و نسخه Database برنامه رو چک می کنیم
چون نسخه Database برنامه به نسخه 22 تغییر کرده ( ارتقا پیدا کرده ) . حالا میایم و تغییرات مربوط به نسخه 23 Database رو اعمال می کنیم تا Database برنامه ما به نسخه 23 تغییر کنه ( ارتقا پیدا کنه )
کد پیاچپی:
اعمال تغییرات بر روی نسخه Database قدیدمی (22) و تبدیل اون به Database نسخه جدید
case VER_SESSION_FEEDBACK_URL:
// Version 23 added columns for session official notes URL and slug.
db.execSQL("ALTER TABLE " + Tables.SESSIONS + " ADD COLUMN "
+ SessionsColumns.SESSION_NOTES_URL + " TEXT");
db.execSQL("ALTER TABLE " + Tables.SESSIONS + " ADD COLUMN "
+ SessionsColumns.SESSION_SLUG + " TEXT");
و در نهایت تغییر نسخه فعلی برنامه به نسخه 23
کد پیاچپی:
تغییر نسخه Database برنامه به نسخه 23
version = VER_SESSION_NOTES_URL_SLUG;
در اینجا اعمال تغییرات بر روی Database قدیمی تموم شده و حالا باید کنترل کنیم ببینیم این تغییرات به درستی صورت گرفته یا خیر
کد پیاچپی:
if (version != DATABASE_VERSION) {
Log.w(TAG, "Destroying old data during upgrade");
db.execSQL("DROP TABLE IF EXISTS " + Tables.BLOCKS);
// ... delete all your tables ...
onCreate(db);
}
در این قسمت چک می کنیم که آیا نسخه فعلی Database ما آخرین نسخه یعنی 23 یا VER_SESSION_NOTES_URL_SLUG شده یا خیر
در صورتی که نشده باشه یعنی Database قبلی برنامه ( که ما میخواستیم به نسخه جدید ارتقاش بدیدم) خارج از نسخه های قابل ارتقای موجود ما هستش و نمیشه اون رو ارتقا داد ( به دلیل اعمال تغییرات زیاد در که ممکنه ما در ساختار نسخه 21 به بعد Database برنامه داده باشیم و نتونیم از نسخه 21 به پایین رو ارتقا بدیم و باید حتما حذف و Database جدید ساخته بشه) که ممکنه به دلیل تغییرات زیاد در ساختار Database ما باشه که باید Table های نسخه قبلی رو حذف و Tableهای نسخه جدید رو به Database اضافه کنیم.
نکته : یک نکته ای که باید بهش دقت کنید این هستش که ما در ساختار دستوری Switch از Break استفاده نکردیم
این به این خاطر هستش که بروز رسانی نسخه ها به صورت خودکار و پشت سر هم انجام بشه.
از دستور Break تنها زمانی استفاده میشه که نیاز به حذف Database قدیم و ساختن ( ایجاد ) Database جدید باشه