簡體   English   中英

Android中的onUpgrade()sqlite數據庫

[英]onUpgrade() sqlite database in Android

我創建了一個Android應用程序,在啟動時檢查是否有新版本的應用程序。 如果是,則應用程序下載新的apk文件並過度安裝新的apk。 我的應用程序使用sqlite db。 但是這個db,從一個版本到另一個版本都可以改變。 我想我必須使用這個方法:

 onUpgrade()

但我不確切知道如何使用它。

當我啟動應用程序時,我將此代碼用於克里特數據庫(如果不存在):

DbHelper mDHelper = new DbHelper(context, DB_NAME, null, DB_VERSION)

如果我想使用onUpgrade()方法,我應該改變什么? 我什么時候打電話給它?

當數據庫版本發生變化時,調用onUpgrade() (你不會自己調用),這意味着底層表結構發生了變化等。

一般來說,這意味着操作系統告訴你“ 嘿,你問過數據庫結構版本10但是我發現我們在這里找到了更舊的東西,所以你有機會在開始使用數據庫之前修復它(並且可能因結構不匹配而崩潰) “

在那個方法中,你應該做所有必要的事情,好吧..升級舊數據庫的結構,以構建匹配當前版本要求,如添加/刪除列,轉換行內容,甚至完全刪除舊數據庫並從頭開始創建 - 適用於Android你在這里做什么並不重要 - 這只是你的代碼執行必要工作(如果有的話)的緊急回調。 您需要注意用戶可能不會經常更新,因此您必須始終處理從版本X到Y的升級,因為X可能不等於ie(Y-1)。

如果您正在使用SQLiteOpenHelper,則每當您更改數據庫版本時都會調用onUpgrade。 還有一個額外的要求。 數據庫名稱必須保持不變。

Old Version:
dbName = "mydb.db"
dbVersion = 1

New Version:
dbName = "mydb.db"
dbVersion = 2

在內容提供程序的onCreate中,您創建了一個采用這些參數的SQLiteOpenHelper實例。 您的SQLiteOpenHelper實現如下所示:

public static final class MySQLiteOpenHelper extends SQLiteOpenHelper {

        public MySQLiteOpenHelper(Context context, int dbVersion, String dbName) {
            super(context, dbName, null, dbVersion);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            //Code to create your db here
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // Code to upgrade your db here
        }

}

當您更改表或在數據庫中添加更多表時,也會調用它

我發現這非常有用https://thebhwgroup.com/blog/how-android-sqlite-onupgrade

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion < 2) {
         db.execSQL(DATABASE_ALTER_TEAM_1);
    }
    if (oldVersion < 3) {
         db.execSQL(DATABASE_ALTER_TEAM_2);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM