Room 用旧数据膨胀数据库
Room inflates database with old data
我正在尝试在首次加载应用程序时自动填充数据库。我正在尝试从本地副本 'inflate' 数据库,如下所示:
public static synchronized bDB getInstance(Context context) {
if(bDB == null) {
Log.v("Hello", "Inflating database.");
bDB = Room.databaseBuilder(context.getApplicationContext(), BDB.class, databaseName)
.createFromAsset("database/bdb.db")
.fallbackToDestructiveMigration()
.build();
}
return bDB;
}
我注意到初始文件中有一个错误(数据错误,模式保持不变)。我更正了它并更新了文件 'bdb.db'。然而,每次数据库被预填充时,它总是会选择旧的、错误的数据。我尝试了以下方法:
- 已清除并使所有缓存失效。
- 清理并重建。
- 检查数据库文件一百万次。
虽然 assets 文件夹中的文件是正确的,但它从哪里获取旧数据?
欢迎任何帮助。
根据评论中的讨论,您似乎遇到了由于模式更改导致的 auto-backup. With Room, this more typically manifests with a 错误 — 在您的情况下,模式相同,但数据不同。
您可以配置自动备份,无论是禁用它(就像您所做的那样,将 android:allowBackup
设置为 false
)还是控制备份哪些文件(使用 android:fullBackupContent
).而且,您可以在每个构建变体的基础上执行此操作,例如 debug
或 release
构建具有不同的值:
- 对于
android:allowBackup
,您应该能够指向布尔资源,在 main
和 debug
中具有不同的值
- 对于
android:fullBackupContent
,您可以在 main
和 debug
中使用不同的规则 拥有不同的 XML 资源
我正在尝试在首次加载应用程序时自动填充数据库。我正在尝试从本地副本 'inflate' 数据库,如下所示:
public static synchronized bDB getInstance(Context context) {
if(bDB == null) {
Log.v("Hello", "Inflating database.");
bDB = Room.databaseBuilder(context.getApplicationContext(), BDB.class, databaseName)
.createFromAsset("database/bdb.db")
.fallbackToDestructiveMigration()
.build();
}
return bDB;
}
我注意到初始文件中有一个错误(数据错误,模式保持不变)。我更正了它并更新了文件 'bdb.db'。然而,每次数据库被预填充时,它总是会选择旧的、错误的数据。我尝试了以下方法:
- 已清除并使所有缓存失效。
- 清理并重建。
- 检查数据库文件一百万次。
虽然 assets 文件夹中的文件是正确的,但它从哪里获取旧数据?
欢迎任何帮助。
根据评论中的讨论,您似乎遇到了由于模式更改导致的 auto-backup. With Room, this more typically manifests with a
您可以配置自动备份,无论是禁用它(就像您所做的那样,将 android:allowBackup
设置为 false
)还是控制备份哪些文件(使用 android:fullBackupContent
).而且,您可以在每个构建变体的基础上执行此操作,例如 debug
或 release
构建具有不同的值:
- 对于
android:allowBackup
,您应该能够指向布尔资源,在main
和debug
中具有不同的值
- 对于
android:fullBackupContent
,您可以在main
和debug
中使用不同的规则 拥有不同的 XML 资源