【发布时间】:2022-01-02 17:16:10
【问题描述】:
问题: 每当我对数据库或模型进行更改时,都会收到以下 Room 数据完整性错误:
我的理解是我不需要增加版本号,因为我使用的是 .fallbackToDestructiveMigration()。
背景:
- 我使用 DB Browser for SQLite (v3.12.0) 对数据库进行更改。
- 我经常对仍在开发中的应用程序/数据库进行更改。所以,我使用的是 .fallbackToDestructiveMigration() (see codelab example)。
文件:RoomDB.java
@Database(entities =
{Note.class, Label.class, Join_ScheduleLabel.class, Schedule.class},
version = 1)
@TypeConverters(DataConverters.class)
public abstract class RoomDB extends androidx.room.RoomDatabase {
public static final String DATABASE_NAME = "vk_prepop.sqlite";
private static RoomDB INSTANCE;
public static RoomDB getInstance(final Context context) {
if (INSTANCE == null) {
synchronized (RoomDB.class) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(
context.getApplicationContext(),
RoomDB.class,
DATABASE_NAME)
// Source: https://developer.android.com/training/data-storage/room/prepopulate
.createFromAsset(DATABASE_NAME)
// Todo: Remove Destructive Migration
// Wipes and rebuilds instead of migrating if no Migration object.
.fallbackToDestructiveMigration()
.build();
}
}
}
return INSTANCE;
}
public abstract RoomDao getRoomDao();
}
已采取的故障排除步骤:
- 验证 RoomDB.java 文件的实体与模型和数据库匹配。
- 进入应用信息并点击“清除数据”(see SO answer)。
- 正在卸载应用程序。
- 在清单 (see SO answer) 中设置
android:allowBackup="false"。
可能的解决方案: 在live-love's 的回答中,他说可能存在identityHash 不匹配,但我不确定如何使用DB Browser for SQLite 解决这个问题。
【问题讨论】:
标签: sqlite android-room