我需要知道如何使用Room Persistence库“从表中拖放”。
我已经知道我们可以使用以下方法删除所有行:
-
但是,我需要删除整个表。这是因为我的primary_key是一个自动增量列,因此使用前面的代码,它不会休息。
我已经在以下链接中阅读了有关此主题的答案:
但是,我无法相信这个库没有提供更简单的方法来进行此操作,无论原因或用途如何。
答案 0 :(得分:2)
可以使用Room提供的Migrations通过我们自己的查询更新数据库。由于我们要更改数据库,Room无法从代码中解析(尚未)。我们可以删除表,重新创建或更新它。根据需要。
选项1:迁移并保留其他数据
version
批注中的@Database
参数。 static final Migration MIGRATION_1_2 = new Migration(1, 2) { // From version 1 to version 2
@Override
public void migrate(SupportSQLiteDatabase database) {
// Remove the table
database.execSQL("DROP TABLE my_table"); // Use the right table name
// OR: We could update it, by using an ALTER query
// OR: If needed, we can create the table again with the required settings
// database.execSQL("CREATE TABLE IF NOT EXISTS my_table (id INTEGER, PRIMARY KEY(id), ...)")
}
};
Room.databaseBuilder(context, MyDatabase.class, "mydatabase")
.addMigration(MIGRATION_1_2) // Add the migration
.build();
选项2:迁移丢失数据
还有一个快速选项,但是数据库中的所有数据将被清除!
这是因为使用以下方法会重新创建数据库。
version
.fallbackToDestructiveMigration()
,如下所示: Room.databaseBuilder(context, MyDatabase.class, "mydatabase")
.fallbackToDestructiveMigration()
.build();
答案 1 :(得分:0)
嗯,不确定,但是您可以尝试删除与该表相关的Dao和Entity类