这是刚入门的房间,很难找到有关此信息。目前,我们像这样定义数据库:
@Database(entities = {TwcLocation.class,
CurrentObservation.class,
Day.class,
Hour.class,
Station.class,
StationCurrentObservation.class}, version = 1, exportSchema = false)
public abstract class TwcLocationDatabase extends RoomDatabase {
现在,我们要删除一堆未使用的实体,使其看起来像这样:
@Database(entities = {TwcLocation.class, Tag.class}, version = 1)
@TypeConverters({TwcLocationTypeConverter.class})
public abstract class NbcRoomDatabase extends RoomDatabase {
问题:我该如何迁移?
答案 0 :(得分:2)
您需要增加版本(因此它将变为version = 2
)。
接下来,当使用Room.databaseBuilder
方法构建Room实例时,添加addMigration()
行。
作为迁移,向其传递以下内容以删除表:
// Migration from version 1 to 2
static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
// Remove the table
database.execSQL("DROP TABLE day"); // This line for each table that you want to remove
}
};
以后,您可能需要进行多种不同的迁移,您可以使用addMigrations()
方法来实现:
Room.databaseBuilder(..., ..., ...)
.addMigrations(MIGRATION_1_2, MIGRATION_2_3)
.build()
答案 1 :(得分:0)
另一种选择是使用fallbackToDestructiveMigration和增量数据库版本。在这种情况下,您将不必提供迁移。然而,将在所有的旧表清除数据。