导出的SQLite数据库不是最新的

问题描述 投票:0回答:1

此问题仅适用于SDK 28设备(模拟器)。使用SQLiteOpenHelper创建的SQLite数据库在应用程序中运行良好,但是当我将其导出到磁盘时(通过Android工作室或代码),其大部分数据都会丢失。在应用程序中对此数据库所做的更改会立即反映在应用程序中,但不会反映在导出的数据库文件中。我尝试导出的数据库文件位于:DDMS - >文件浏览器 - >数据 - >数据 - >我的包名 - >数据库 - >我的数据库文件。在SDK <28设备上,数据库文件导出非常好。

android database sqlite sqliteopenhelper android-9.0-pie
1个回答
1
投票

我独立解决了这个问题。

我发现数据库文件夹除了数据库本身还包含两个补充文件。该文件夹的内容如下所示:

  • 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中使用的数据库日志记录设置。这样做为我提供了一个单独的数据库文件,其中包含完整的和最新的数据,而不依赖于补充文件。

© www.soinside.com 2019 - 2024. All rights reserved.