2

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

  • 数据库.db
  • database.db-期刊
  • 数据库.db-shm
  • 数据库.db-wal

所有 Android 文档都讲述了每个数据库有一个数据库文件,但这些信息似乎已经过时了。

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

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

提前谢谢了。

4

1 回答 1

2

做了一些谷歌搜索,发现了一些关于其他文件的信息:

database.db-期刊

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

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

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

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

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

资源

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

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

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

这些文件是 SQLite 3.7 的一个新特性。

资源

希望有帮助...

于 2012-11-18T16:29:15.487 回答