导出的 SQLite 数据库不是最新的
Exported SQLite database is not up to date
此问题仅适用于 SDK 28 设备(模拟器)。
我使用 SQLiteOpenHelper 创建的 SQLite 数据库在应用程序中完美运行,但是当我将它导出到磁盘时(通过 Android studio 或代码),它的大部分数据都丢失了。在应用程序中对此数据库所做的更改会立即反映在应用程序中,但不会反映在导出的数据库文件中。我要导出的数据库文件位于:
DDMS -> 文件资源管理器 -> 数据 -> 数据 -> 我的包名 -> 数据库 -> 我的数据库文件。
在 SDK < 28 设备上,数据库文件导出非常好。
我独立解决了这个问题。
我发现数据库文件夹除了数据库本身还包含两个补充文件。文件夹的内容如下所示:
- MyDatabase.db
- MyDatabase.db-shm
- MyDatabase.db-沃尔
没有这些文件,数据库是不完整的。
SDK 28之前,只有一个补充文件,不影响数据库的完整性:
- MyDatabase.db-期刊
解决方案是在 SQLiteOpenHelper 中我的数据库的单例实例上执行 .setWriteAheadLoggingEnabled(false):
synchronized static MyDatabase getInstance(Context context) {
if (instance == null) {
instance = new MyDatabase(context.getApplicationContext());
instance.setWriteAheadLoggingEnabled(false);
}
return (instance);
}
默认情况下,这将恢复 SDK < 28 中使用的数据库日志记录设置。这样做为我提供了一个数据库文件,其中包含不依赖于补充文件的完整和最新数据。
此问题仅适用于 SDK 28 设备(模拟器)。 我使用 SQLiteOpenHelper 创建的 SQLite 数据库在应用程序中完美运行,但是当我将它导出到磁盘时(通过 Android studio 或代码),它的大部分数据都丢失了。在应用程序中对此数据库所做的更改会立即反映在应用程序中,但不会反映在导出的数据库文件中。我要导出的数据库文件位于: DDMS -> 文件资源管理器 -> 数据 -> 数据 -> 我的包名 -> 数据库 -> 我的数据库文件。 在 SDK < 28 设备上,数据库文件导出非常好。
我独立解决了这个问题。
我发现数据库文件夹除了数据库本身还包含两个补充文件。文件夹的内容如下所示:
- MyDatabase.db
- MyDatabase.db-shm
- MyDatabase.db-沃尔
没有这些文件,数据库是不完整的。
SDK 28之前,只有一个补充文件,不影响数据库的完整性:
- MyDatabase.db-期刊
解决方案是在 SQLiteOpenHelper 中我的数据库的单例实例上执行 .setWriteAheadLoggingEnabled(false):
synchronized static MyDatabase getInstance(Context context) {
if (instance == null) {
instance = new MyDatabase(context.getApplicationContext());
instance.setWriteAheadLoggingEnabled(false);
}
return (instance);
}
默认情况下,这将恢复 SDK < 28 中使用的数据库日志记录设置。这样做为我提供了一个数据库文件,其中包含不依赖于补充文件的完整和最新数据。