禁用Android Pie中的sqlite Write-Ahead日志记录


Android Pie sqlite默认情况下已启用Write-Ahead日志记录(WAL).这仅在Pie设备中导致现有代码出错.

由于我访问数据库的方式,我无法使用SQLiteDatabase.disableWriteAheadLogging()或PRAGMA journal_mode成功关闭WAL.我想用一个名为db_compatibility_wal_supported的Android设置完全禁用WAL:

Compatibility WAL (Write-Ahead Logging) for Apps

有谁知道如何配置这个?我不知道这个文件是否可以在启动时以编程方式更改,或者是否手动更改.

关于这个问题的进一步细节

我的应用程序中有一个sqlite数据库(20mb / 250k记录).此db是使用我的服务器上的普通java生成的.它包含一个食物数据库,应用程序的用户可以添加到数据库(并更新服务器).这存储在android中的assets文件夹中.
在首次安装期间,数据库将从资产复制到app文件夹,以便可以使用以下方法将其写入:

Copy SQLite database from assets folder

不幸的是,一旦我开始使用SqlDroid写入数据库,wal就会启用并且原始数据库中的表已经消失,只剩下任何新创建的表.然而,数据库的大小仍然是20mb.所有数据库错误都是由于缺少表.
表复制和写入方法在Pie之前的Android版本中完美运行.

最佳答案 @Rockvole请分享您所面临的错误,这有助于我们找到合适的解决方案.

同时,我明白你想要在android馅饼中关闭那个WAL并且你正在使用“SQLDroid”lib来创建Sqlite DB.

这个lib内部使用“SQLiteDatabase”在本地存储数据,我认为你需要在“SQLiteDatabase”类中调用“SQLiteDatabase.disableWriteAheadLogging()”,其中数据库实例创建的包名是“package org.sqldroid;”

或获取内部SQLiteDatabase实例并调用disableWriteAheadLogging().

第二个解决方案是在values文件夹中创建“config.xml”,并且“< bool name =”db_compatibility_wal_supported“> false< / bool>”并运行并检查其工作.

点赞