6

Android Room 有方法 void clearAllTables(),根据文档,它做了以下内容:

从注册到此数据库的所有表中删除所有行entities()

这不会重置由autoGenerate().

删除行后,Room 将设置 WAL 检查点并运行 VACUUM。这意味着数据被完全擦除。如果数量超过数据库文件大小的阈值,系统将回收空间。

我在我的项目中检查了它,看起来 db 在那次调用之后没有数据,但是当我从我的设备中提取 *.db 文件并在sqlite查看器中打开它时,我看到所有数据都存在,表格被填满,什么也没有已被删除。这个怎么可能?我认为这是我的应用程序中的一个潜在缺陷。请提供可靠的洁净室数据库方法

4

1 回答 1

1

看起来 db 在那个调用之后没有数据

这意味着该方法有效。


当我从设备中提取 *.db 文件并在 sqlite 查看器中打开它时,我看到所有数据都存在

很可能事务还没有从 WAL 文件移动到原始数据库。


解决方案

您可以使用 wal_checkpoint pragma 强制检查点。针对数据库查询以下语句。

pragma wal_checkpoint(full)
于 2018-07-17T13:19:37.733 回答