什么是Android中的"-journal"SQLite数据库?

ddo*_*arr 24 sqlite android journal

在我的andoid应用程序的数据库目录(/data/data/com.me.myApp/databases)中,对于我创建的每个sqlite数据库,都有一个相同名称的相应数据库,并在其名称后附加了"-journal".

例如:myDatabase,myDatabase-journal,myOtherDatabase.db,myOtherDatabase.db-journal

这是什么?

和,

如果我为我的应用程序提供预填充数据库(根据:http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/)我是否需要包括这些也是?"

use*_*740 23

这些-journal文件并不需要(也应该)进行分配.

这是因为各种日志文件代表SQLite使用的临时数据(参考SQLite的临时磁盘文件的使用).特别是-journal文件是回滚日志.

回滚日志是一个临时文件,用于在SQLite中实现原子提交和回滚功能.(有关其工作原理的详细讨论,请参阅标题为"在SQLite中的原子提交"的单独文档.)回滚日志始终与数据库文件位于同一目录中,并且与数据库文件具有相同的名称,除了8个字符" -journal"追加.

回滚日志通常在首次启动事务时创建,通常在事务提交或回滚时删除.回滚日志文件对于实现SQLite的原子提交和回滚功能至关重要.如果没有回滚日志,SQLite将无法回滚未完成的事务,如果在事务中间发生崩溃或断电,整个数据库可能会在没有回滚日志的情况下损坏.

通常,这些-journal文件应仅存在打开的SQLite数据库存在 - 或者更确切地说,是一个正在运行的事务 - 但可以通过PRAGMA journal_mode进行控制.使用默认的pragma设置,-journal文件将被删除.

DELETE日记模式是正常行为.在DELETE模式下,在每个事务结束时删除回滚日志.实际上,删除操作是导致事务提交的操作.

当数据库打开且所有日志已被SQLite本身删除(或清除)时,请确保复制实际的数据库文件; 这意味着所有事务都已完成且数据库处于一致状态.

  • @Michael,很抱歉,恐怕我来这里可能太晚了,但是我有一些有趣的信息[这里](http://sandersonforensics.com/forum/content.php?208-Dealing-with-在SQLite-Rollback-Journals中找到记录)。它表示在提交事务时,标头通常为零。在每次提交时,都会写入标头,然后写入页面,覆盖原始内容,然后在成功时仅将标头清零。如果另一个提交不执行的话,“清理”(例如删除)文件的一般方法是在数据库中执行VACUUM。 (2认同)