Помощник по базе данных с моей идеей обновления:
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
s схема базы данных будет обновляться шаг за шагом до самой новой версии, независимо от того, какая версия была у пользователя до этого. Если oldVersion
равно 8
, будут запущены методы обновления upgradeToNinth(db)
, upgradeToTenth(db)
и upgradeToEleventh(db)
. Большой!
Но этот код предполагает, что значение newVersion
всегда является самой новой версией базы данных (значение, предоставленное конструктору SQLiteOpenHelper
). Всегда ли это правда? Бывают ли случаи, когда метод onUpgrade
вызывается с newVersion
отличным от самого нового?