在 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 模式的最好和最简单的方法如下:
public class MyDbHelper extends SQLiteOpenHelper {
//...
@Override
public void onOpen(SQLiteDatabase db) {
db.disableWriteAheadLogging(); // Here the solution
super.onOpen(db);
}
//...
}
这样,所有对数据库的访问都将禁用 WAL 模式。在应用程序的整个实现过程中打开和关闭多个连接
关于android - 在 Android Pie 中禁用 sqlite 预写日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53659206/