【发布时间】:2018-12-06 20:29:27
【问题描述】:
在 Android Pie 中,sqlite 预写日志 (WAL) 默认已启用。这仅在 Pie 设备中导致我现有代码的错误。
由于我访问数据库的方式,我无法使用SQLiteDatabase.disableWriteAheadLogging() 或PRAGMA journal_mode 成功关闭 WAL。我想使用名为 db_compatibility_wal_supported 的 Android 设置完全禁用 WAL:
Compatibility WAL (Write-Ahead Logging) for Apps
有人知道如何配置吗?我不知道这个文件是否可以在启动时以编程方式更改,或者是否可以手动更改。
有关问题的更多详细信息
我的应用中有一个 sqlite 数据库(20mb+ / 250k 条记录)。这个数据库是在我的服务器上使用纯 java 生成的。它包含一个食物数据库,应用程序的用户可以添加到数据库中(并且服务器已更新)。这存储在 android 的 assets 文件夹中。 在首次安装期间,数据库会从 assets 复制到 app 文件夹,以便可以使用以下方法对其进行写入:
Copy SQLite database from assets folder
不幸的是,一旦我开始使用 SqlDroid 写入数据库,就会启用 wal,并且原始数据库中的表已经消失,只剩下任何新创建的表。然而,数据库的大小仍然是 20mb+。所有数据库错误都是由于缺少表。 表格复制和写入方法在 Pie 之前的 Android 版本中完美运行。
【问题讨论】:
-
WAL 导致错误你到底在做什么?
-
如果您使用的是 SQLiteOpenHelper 的子类,请尝试覆盖 onConfigure 方法并在该方法中发出编译指示。
-
我正在使用 SQLDroid 连接到我的数据库,因为我在我的应用程序和服务器中使用相同的数据库访问代码。
connection = new org.sqldroid.SQLDroidDriver().connect() -
相关? stackoverflow.com/questions/43244091/… 如果你可以使用 Root 权限..
标签: android sqlite wal sqldroid