首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android 9数据库日志模式WAL在备份时发出

Android 9数据库日志模式WAL在备份时发出
EN

Stack Overflow用户
提问于 2020-04-11 16:44:17
回答 2查看 428关注 0票数 0

我的应用程序中有一些备份/恢复功能,这会在使用>= Android9时产生问题,SQLite数据库使用的是journal_mode WAL而不是在旧手机上使用的DELETE。我的SQLLite版本是3.25.2

更多信息:

我正在使用糖ORM,这是完全集成到我的项目。Sugar使用自己的类,例如扩展SugarDb和类的SQLiteOpenHelper是只读的.

问题:

  1. 如何检查journal_mode是否为*.db文件的WAL?
  2. 如何正确复制/恢复*.db文件( SQLite journal_mode为WAL?
  3. 如何和在何处将SQLite journal_mode从WAL切换到删除所有手持设备?

)

EN

回答 2

Stack Overflow用户

发布于 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()

最简单的方法是,一旦您完成了当前的数据库操作,因为您无法查询它的连接计数,或者您可以在应用程序生命周期中的不同时间(如onPauseonDestroy )或在尝试备份之前维护自己的计数并关闭

答1. https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#isWriteAheadLoggingEnabled()

票数 1
EN

Stack Overflow用户

发布于 2020-04-27 09:06:56

最有用的方法,所以fare是一种检查:Backup sqlite db in WAL mode without FileStreams // by export/backup sql commands中提到的数据库的方法。

谢谢大家的建议。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61160308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档