首页 文章

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

提问于
浏览
20

在我的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/),我是否还需要包含这些数据库?

1 回答

  • 19

    这样的 -journal 文件不需要(也不应该)分发 .

    这是因为各种日志文件表示SQLite使用的临时数据(ref . SQLite's Use Of Temporary Disk Files) . 特别是 -journal 文件是回滚日志 .

    回滚日志是用于在SQLite中实现原子提交和回滚功能的临时文件 . (有关其工作原理的详细讨论,请参阅 Headers 为“在SQLite中的原子提交”的单独文档 . )回滚日志始终与数据库文件位于同一目录中,并且与数据库文件具有相同的名称,除了8个字符“ -journal“追加 . 回滚日志通常在首次启动事务时创建,通常在事务提交或回滚时删除 . 回滚日志文件对于实现SQLite的原子提交和回滚功能至关重要 . 如果没有回滚日志,SQLite将无法回滚未完成的事务,如果在事务中间发生崩溃或断电,整个数据库可能会在没有回滚日志的情况下损坏 .

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

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

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

相关问题