gab*_*bin 5 android android-sqlite android-room android-architecture-components sqlite-journal-mode
Android Room的方法无效clearAllTables(),根据文档,它可以进行以下操作:
从所有表中删除所有记录为的行
entities()。这不会重置由生成的自动增量值
autoGenerate()。删除行后,Room将设置一个WAL检查点并运行VACUUM。这意味着数据被完全擦除。如果该空间超过数据库文件大小的阈值,则系统将回收该空间。
我在项目中对其进行了检查,发现该调用之后db似乎没有数据,但是当我从设备中提取* .db文件并在sqlite查看器中将其打开时,我已经看到所有数据都存在,表已被填充并且什么都没有已被删除。怎么可能?我认为这是我应用程序中的潜在缺陷。请提供洁净室数据库的可靠方法
看起来 db 在调用之后没有数据
这说明这个方法有效了。
当我从设备中提取 *.db 文件并在 sqlite 查看器中打开它时,我看到所有数据都存在
很可能事务尚未从 WAL 文件移至原始数据库。
您可以使用 wal_checkpoint pragma 强制检查点。针对数据库查询以下语句。
pragma wal_checkpoint(full)
Run Code Online (Sandbox Code Playgroud)