انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
آموزش نحوه بروزرسانی Database به نسخه جدید

آموزش نحوه بروزرسانی Database به نسخه جدید

#1
آموزش نحوه بروزرسانی Database برنامه به نسخه (های) جدید


در این آموزش سعی داریم تا یکی از روش های بروزرسانی Database برنامه به نسخه های جدید رو بر مبنای آموزش های GOOGLE IO توضیح بدیم که به روش 
Cascading Database Updates معروف هستش
در این روش هر نسخه Database برنامه دارای نام و شماره مخصوص بخود هستش
مثلا : 
کد پی‌اچ‌پی:
VER_LAUNCH 21 
که در اینجا  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
در اینجا فرض بر این گرفته شده که برنامه دارای سه نسخه متفاوت از Database هستش 
که ما آونها رو در بالا تعریف کردیم

بعد از آن میایم و یک متغییر کنترلی دیگه تعریف میکینم بنام

کد پی‌اچ‌پی:
private static final int DATABASE_VERSION VER_SESSION_NOTES_URL_SLUG
یعنی در حال حاظر نسخه Database برنامه ما VER_SESSION_NOTES_URL_SLUG هستش

حالا میایم در کلاس Extend  شده از SQLiteOpenHelper در متد OnUpgrade  کد های زیر رو مینویسیم

کد پی‌اچ‌پی:
@Override
public void onUpgrade(SQLiteDatabase dbint oldVersionint 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
ابتدا میایم و نسخه قبلی Database رو در یک متغییر جدید ذخیره میکنیم
بعد از آن با استفاده از دستور 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"); 
در اینجا تغییرات شامل اضافه شدن یک ستون جدید بنام SESSION_FEEDBACK_URL به Database برنامه بود
کد پی‌اچ‌پی:
تغییر نسخه 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"); 
اینجا تغییرات شامل اضافه شدن 2 ستون جدید بنام SESSION_NOTE_URL و SESSION_SLUG هستش

و در نهایت تغییر نسخه فعلی برنامه به نسخه 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 جدید باشه
پاسخ
 سپاس شده توسط admin ، شماره مجازی امارات ، تلگرام ضد فیلتر 2023


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان