我的应用程序中有一些备份/恢复功能,这会在使用>= Android9时产生问题,SQLite数据库使用的是journal_mode WAL而不是在旧手机上使用的DELETE。我的SQLLite版本是3.25.2
更多信息:
我正在使用糖ORM,这是完全集成到我的项目。Sugar使用自己的类,例如扩展SugarDb和类的SQLiteOpenHelper是只读的.
问题:
)
发布于 2020-04-11 17:21:52
一些良好的背景阅读https://sqlite.org/wal.html
回答3。在onConfigure of SQLiteOpenHelper中使用SQLiteOpenHelper(或者在您的情况下,您可能需要扩展和覆盖SugarDb类才能做到这一点)。
您可能还必须扩展getInstance,以返回您自己类的实例(而不是调用super在该覆盖中),然后在扩展类上调用SugarDb.getInstance()调用getInstance。
回答2.如@CommonsWare所述,如果您的DB被正确关闭,那么所有数据在关闭时都会从Wal文件中被提交到DB文件中。
更新:查看https://github.com/chennaione/sugar/blob/master/library/src/main/java/com/orm/SugarDb.java
每次您调用SugarDb.getReadableDatabase()或SugarDb.getWritableDatabase()时,都应该调用SugarDb.close()
最简单的方法是,一旦您完成了当前的数据库操作,因为您无法查询它的连接计数,或者您可以在应用程序生命周期中的不同时间(如onPause或onDestroy )或在尝试备份之前维护自己的计数并关闭
发布于 2020-04-27 09:06:56
最有用的方法,所以fare是一种检查:Backup sqlite db in WAL mode without FileStreams // by export/backup sql commands中提到的数据库的方法。
谢谢大家的建议。
https://stackoverflow.com/questions/61160308
复制相似问题