【发布时间】:2021-11-13 21:12:45
【问题描述】:
我想停止创建 .db-shm 和 .db-wal 文件。我只想要我的数据目录的数据库文件夹中的.db 文件。
一些旧设备生成.db-shm 和.db-wal,而一些最新设备生成.db-journal。
当我尝试备份/恢复我的数据库文件时,这会产生问题。
我想知道是否可以通过android中的代码来实现?
【问题讨论】:
标签: android sqlite android-studio
我想停止创建 .db-shm 和 .db-wal 文件。我只想要我的数据目录的数据库文件夹中的.db 文件。
一些旧设备生成.db-shm 和.db-wal,而一些最新设备生成.db-journal。
当我尝试备份/恢复我的数据库文件时,这会产生问题。
我想知道是否可以通过android中的代码来实现?
【问题讨论】:
标签: android sqlite android-studio
我想知道是否可以通过android中的代码来实现?
是的,这是可能的。
您可以使用 SQLiteDatabase 的 disableWriteAheadLogging 强制日志模式(这使用 -journal 文件,但在日志模式下,附加文件包含所做更改的日志,因此不需要该文件(仅用于回滚))方法(如果使用 SQLiteOpenHelper 的子类,我建议在 onOpen 方法中执行此操作。)
您还可以使用 SQLite 的 journal_mode PRAGMA(如果使用 SQLiteOpenHelper 的子类,我再次建议在 onOpen 方法中使用。)
另一种选择是保持 WAL 模式,但要确保数据库是完全检查点的。关闭数据库应该完全检查数据库,然后如果-wal文件仍然存在,它应该是空的,在这种情况下不需要。
还有保存 -wal 和 -shm 文件的选项。
【讨论】:
db..isWriteAheadLoggingEnabled() 表示 WAL 文件已禁用,但是当我检查应用程序数据目录中的数据库文件夹时仍然存在
是的,可以停止创建 .wal 和 .shm 文件。观察到的一件事是,直到 Android 9 版本,系统使用原始 .db 文件创建 .wal 和 .shm 并在 Android 10 或此类文件的最新版本不存在,但有一个名为 .journal 的新文件。
要停止创建 .wal 和 .shm 等文件,只需在 SQLite 帮助器类中添加方法...
@Override
public void onOpen(SQLiteDatabase db)
{
super.onOpen(db);
db.disableWriteAheadLogging();
}
【讨论】: