gpt4 book ai didi

android - 在 Android Pie 中禁用 sqlite 预写日志记录

转载 作者:IT王子 更新时间:2023-10-29 06:24:05 28 4
gpt4 key购买 nike

在 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com