数据库助手带着我的升级理念:
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "myapp.db";
private static final int DATABASE_VERSION = 11;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) { /* ... */ }
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch(oldVersion) {
case 1: upgradeToSecond(db);
case 2: upgradeToThird();
case 3: upgradeToFourth();
// ...
case 10: upgradeToEleventh();
}
}
private void upgradeToSecond(SQLiteDatabase db) { /* ... */ }
private void upgradeToThird(SQLiteDatabase db) { /* ... */ }
private void upgradeToFourth(SQLiteDatabase db) { /* ... */ }
// ...
private void upgradeToEleventh(SQLiteDatabase db) { /* ... */ }
}
由于交换机没有 break
,无论用户以前使用过什么版本,数据库架构都会逐步更新到最新版本。如果oldVersion
为8
,则会运行升级方法upgradeToNinth(db)
,upgradeToTenth(db)
和upgradeToEleventh(db)
。太好了!
但是这段代码假设newVersion
的值始终是数据库的最新版本(提供给SQLiteOpenHelper
构造函数的值)。这个alwyas真的吗?是否有onUpgrade
方法调用newVersion
方法,而其他最新方法?
答案 0 :(得分:1)
但是这段代码假设newVersion的值始终是数据库的最新版本(提供给SQLiteOpenHelper构造函数的值)。这是真的吗?
是
这可以通过阅读source来验证,onUpgrade()
调用newVersion
SQLiteOpenHelper
参数与您传递给{{1}}构造函数的参数相同。
答案 1 :(得分:0)
是否存在使用newVersion调用onUpgrade方法时最新的方法?
onUpgrade
仅在您发布应用程序的更新版本并增加数据库版本后执行。