android - 如何处理BackupHelper和SQLites附加文件

标签 android sqlite backup

我目前正在为我的 Android 应用程序的数据库开发一个 BackupHelper。方法 Context.databaseList() 报告属于我的应用程序的所有数据库的名称。但除了主 SQLite 数据库文件之外,我确实遇到了很多其他文件(例如):

  • 数据库.db
  • 数据库.db-journal
  • 数据库.db-shm
  • 数据库.db-wal

所有 Android 文档都介绍了每个数据库一个数据库文件,但此信息似乎已过时。

是否可以使用 BackupHelper 来存储所有这些文件?

恢复后,SQLite 是否可以在所有 Android 平台上使用这些文件?

提前非常感谢。

最佳答案

进行了一些谷歌搜索,发现了有关其他文件的一些信息:

database.db-journal

SQLite 默认情况下会在事务开始时创建日志文件,这是一件好事。通常它会在提交时删除文件。

您可以更改此行为以简单地截断文件(无需创建/删除)或通过 PRAGMA sql 命令将其归零。您的 SQLite 版本可能不支持所有选项。

PRAGMA journal_mode = DELETE | TRUNCATE | PERSIST | MEMORY | OFF

写操作通常在您提交之前不会完成,这是通过截断、删除或使日志失效来实现的。

如果这种行为是新的,我无法解释为什么它可能会发生变化,除了 SQLite 的升级可能改变了默认行为,或者通过不重新打开每个事务的日志而变得更加复杂。

Source

database.db-shm database.db-wal

这些是 SQLite 创建的临时文件。如果您手动删除主数据库,您可能也应该删除它们。据我所知,WAL 是回滚日志的替代品,它使 SQLite 能够在事务失败时回滚更改。 SQLite 如何使用它们以及为什么它们保留这么长时间取决于 SQLite 的作者,但总的来说 SQLite 看起来非常坚固,所以我不会太担心它们。欲了解更多信息,请查看此处:

http://www.sqlite.org/fileformat2.html#walindexformat

这些文件是 SQLite 3.7 的新功能。

Source

希望有帮助...

关于android - 如何处理BackupHelper和SQLites附加文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13441906/

相关文章:

java - onValueSelected() 没有在 BarChart 中调用,而是 onNothingSelected() 每次当我点击 BarChart 中的任何栏或任何地方时调用

SQLite 条件 where 子句

android.database.sqlite.SQLiteException : near "ORDER": syntax error (code 1): ,

python sqlite auto increment 仍然要求插入时的 id 字段

sql-server - 压缩文件夹中的 SQL 备份

backup - docker commit 运行容器

backup - Rsync - 将符号链接(symbolic link)复制为目录,但如果它们指向文件则跳过

java - 发出 Volley-okhttp 请求时出现 NullPointerException

java - 我们如何加载其他语言数据而不是英语数据?

android - 仅将粗体文本保存到跨字符串中的字符串数组?