Android 9 中的空 SQLite 文件

Empty SQLite file in Android 9

上次我注意到我的应用程序在 SQLite 数据库备份方面存在问题。为了进行数据库备份,我将 *.db 文件从 /data/data/com.pkg.app/databases/db_name.db 复制到内部存储。要恢复我从内部存储复制到 /data/data/com.pkg.app/databases/db_name.db。但是在 Android P 中有问题。那些 db 文件存在,但它的重量是 4kB。当我通过 DB Browser 打开这些文件时,我注意到文件是空的——没有表格和数据。这很奇怪,因为应用程序运行正常。问题是我应该在哪里寻找我的应用程序正在使用的数据库文件? Android 8以下没有这个问题。我正在使用模拟器。

在Android中,P+ WAL(预写日志记录)默认开启。这会产生两个额外的文件,它们在原始文件名后加上 -shm(共享内存文件)和 -wal(预写日志记录)。

这些要么需要在备份和恢复时复制,要么只有在确保数据库已完全检查点后才需要备份,然后您可以删除 -shm 和 -wal 文件作为恢复过程的一部分。

另一种方法是禁用 WAL 并使用效率较低的日志模式。

您不妨查看