从Room DB中删除实体

时间:2019-01-29 14:20:29

标签: android android-room

这是刚入门的房间,很难找到有关此信息。目前,我们像这样定义数据库:

@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 {

问题:我该如何迁移?

2 个答案:

答案 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和增量数据库版本。在这种情况下,您将不必提供迁移。然而,将在所有的旧表清除数据。