SQLiteOpenHelper#onUpgrade() — всегда ли newVersion является самой новой версией?

Помощник по базе данных с моей идеей обновления:

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

Благодаря переключателю без breaks схема базы данных будет обновляться шаг за шагом до самой новой версии, независимо от того, какая версия была у пользователя до этого. Если oldVersion равно 8, будут запущены методы обновления upgradeToNinth(db), upgradeToTenth(db) и upgradeToEleventh(db). Большой!

Но этот код предполагает, что значение newVersion всегда является самой новой версией базы данных (значение, предоставленное конструктору SQLiteOpenHelper). Всегда ли это правда? Бывают ли случаи, когда метод onUpgrade вызывается с newVersion отличным от самого нового?


person fracz    schedule 18.02.2014    source источник


Ответы (2)


Но в этом коде предполагается, что значение newVersion всегда является самой новой версией базы данных (значение, предоставленное конструктору SQLiteOpenHelper). Всегда ли это правда?

Да.

В этом можно убедиться, прочитав source, где onUpgrade() вызывается с аргументом newVersion, который вы передали в качестве аргумента конструктору SQLiteOpenHelper.

person laalto    schedule 18.02.2014

Есть ли случаи, когда метод onUpgrade вызывается с новой версией, отличной от самой новой?

onUpgrade выполняться только после выпуска обновленной версии приложения и увеличения версии базы данных.

person Ajay S    schedule 18.02.2014