【问题标题】:SQLiteOpenHelper#onUpgrade() - is newVersion alwyays the newest version?SQLiteOpenHelper#onUpgrade() - newVersion 总是最新版本吗?
【发布时间】:2014-03-18 08:56:21
【问题描述】:

我的升级想法的数据库助手:

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) { /* ... */ }
}

感谢 without breaks 的开关,无论用户以前使用什么版本,数据库架构都会逐步更新到最新版本。如果oldVersion8,则升级方法upgradeToNinth(db)upgradeToTenth(db)upgradeToEleventh(db) 将运行。太好了!

但此代码假设newVersion 的值始终是数据库的最新版本(提供给SQLiteOpenHelper 构造函数的值)。这总是真的吗?有没有使用newVersion 调用onUpgrade 方法而不是最新方法的情况?

【问题讨论】:

    标签: android android-sqlite sqliteopenhelper


    【解决方案1】:

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

    是的。

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

    【讨论】:

      【解决方案2】:

      是否存在使用 newVersion 而非最新版本调用 onUpgrade 方法的情况?

      onUpgrade只有在你发布应用的更新版本并增加数据库版本后才执行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-31
        • 2014-09-21
        • 1970-01-01
        • 2018-11-04
        • 2016-09-17
        相关资源
        最近更新 更多