Sad*_*dat 6 android data-integrity android-room
我已向现有数据库添加了一些新实体(表)。因此在数据库配置中配置了这些-
@Database(entities = {existingTable1.class, existingTable2.class, existingTable3.class, existingTable4.class,
newTable1.class, newTable2.class
}, version = 1, exportSchema = false)
Run Code Online (Sandbox Code Playgroud)
由于该应用程序处于开发阶段,我用来避免迁移。因此,我已从设备中卸载该应用程序并通过 Android Studio(运行)进行安装。但它给出了以下错误-
Room 无法验证数据完整性。您似乎已更改架构但忘记更新版本号。您可以通过增加版本号来简单地解决此问题。
在我的清单中,allowBackup 设置为 false,如下所示-
android:allowBackup="false"
Run Code Online (Sandbox Code Playgroud)
编辑
我有一件事要提。我在 asset 文件夹中有一个 sqlite 数据库文件。我只是在安装时将其复制到相应的应用程序数据库文件夹中。因此,当需要添加包含大量预填充数据的新表时,我只需更新 asset 文件夹中的 sqlite 数据库文件,然后调整相关实体并构建/运行项目。这样,它工作得很好,但这次却产生了这个问题。
小智 0
当您更改 Room 数据库结构时,您应该创建一种方法来更新现有数据库。如果第一个结构是版本 1,那么第二个结构应该是版本 2。但是 Room 需要一种方法将现有数据库更新为新结构。您应该创建一个迁移函数。
static RoomDatabase getDatabase(final Context context) {
if (INSTANCE == null) {
synchronized (RoomDatabase.class) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
RoomDatabase.class, "your_database")
.addMigrations(MIGRATION_1_2)
.build();
}
}
}
return INSTANCE;
}
private static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE IF NOT EXISTS new_table...
}
};
Run Code Online (Sandbox Code Playgroud)
如果您只想从头开始而不更新当前数据库,那么您可以删除它以强制创建数据库。
static RoomDatabase getDatabase(final Context context) {
if (INSTANCE == null) {
synchronized (RoomDatabase.class) {
if (INSTANCE == null) {
// do not forget to remove this line if it is not needed
context.getApplicationContext().deleteDatabase("your_database");
// Create database here
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
RoomDatabase.class, "your_database")...
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4840 次 |
| 最近记录: |