使用SQLite/Room时产生的中间文件是什么

在学习Room时发现,当创建一个名为book_database的数据库文件后,同时会产生两个带“后缀”的文件:book_database-shmbook_database-wal。对此比较好奇:这两个文件时什么?为什么产生?

认为它们是临时文件的原因是注意到它们的名字前缀(book_database)是相同的,而且恰好是在代码中指明的数据库的名字。

Google一番,在StackOverFlow上找到这么一篇QA:https://stackoverflow.com/questions/7778723/what-are-the-db-shm-and-db-wal-extensions-in-sqlite-databases。里面给出了官网的介绍链接:https://www.sqlite.org/wal.html。

  • shm是共享内存文件,里面仅包含了临时数据。
  • wal是为了支持回滚事务产生的临时文件。例如,当事务执行失败时,SQLite能通过它回滚修改,确保数据的正确性。

注意:在导处查看数据库文件,必须也将wal文件也导出,否则去查看数据库文件,会发现内容为空