SQLiteOpenHelper #onUpgrade() - 新版本始终是最新版本吗?

时间:2014-02-18 14:21:28

标签: android android-sqlite sqliteopenhelper

数据库助手带着我的升级理念:

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,无论用户以前使用过什么版本,数据库架构都会逐步更新到最新版本。如果oldVersion8,则会运行升级方法upgradeToNinth(db)upgradeToTenth(db)upgradeToEleventh(db)。太好了!

但是这段代码假设newVersion的值始终是数据库的最新版本(提供给SQLiteOpenHelper构造函数的值)。这个alwyas真的吗?是否有onUpgrade方法调用newVersion方法,而其他最新方法?

2 个答案:

答案 0 :(得分:1)

  

但是这段代码假设newVersion的值始终是数据库的最新版本(提供给SQLiteOpenHelper构造函数的值)。这是真的吗?

这可以通过阅读source来验证,onUpgrade()调用newVersion SQLiteOpenHelper参数与您传递给{{1}}构造函数的参数相同。

答案 1 :(得分:0)

  

是否存在使用newVersion调用onUpgrade方法时最新的方法?

onUpgrade仅在您发布应用程序的更新版本并增加数据库版本后执行。