1.SQLiteOpenHelper.onCreate
ДА, для этого есть класс обратного вызова.Вы можете добавить Обратный звонок в RoomDatabase.Builder, как это
Room.databaseBuilder(getApplicationContext(), MyDb.class, "database-name")
.addCallback(new Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
//do something
}
@Override
public void onOpen(@NonNull SupportSQLiteDatabase db) {
super.onOpen(db);
//do something
}
})
.build();
2.SQLiteOpenHelper.onUpdate
ДА, для этого есть класс Migration.Вы можете добавить миграцию в RoomDatabase.Builder следующим образом:
Room.databaseBuilder(getApplicationContext(), MyDb.class, "database-name")
.addMigrations(MIGRATION_1_2, MIGRATION_2_3).build();
static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE `Fruit` (`id` INTEGER, "
+ "`name` TEXT, PRIMARY KEY(`id`))");
}
};
static final Migration MIGRATION_2_3 = new Migration(2, 3) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE Book "
+ " ADD COLUMN pub_year INTEGER");
}
};
Если приложение обновляет версию базы данных с версии 1 до 4.
- , вариант A. Если вы определили миграции для версии 1 на4.
- Бум.комната будет вызывать только один код миграции.версии 1–4.
- вариант B. если вы определили миграции для версий 1–2, версий 2–3, версий 3–4.
- комната сработаетвсе миграции по очереди.
вам следует проверить эту документацию Базы данных Migrating Room
и эту статью Понимание миграции с помощьюномер