[英]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.