首页 > 解决方案 > Android房间批量删除键

问题描述

我有一个我之前填充的对象表和一个包含数千个应该在表中的对象的新列表。如果 id 列表中不存在其主键,我想删除表中的每个对象。基本上是批量删除以摆脱旧项目。有没有一种简单的方法可以用 Room 做到这一点?我在文档中没有看到它,但也许我忽略了它。

更清楚地说,我的 id 列表是我不想删除的项目列表,并且超过了变量的 999 sql 限制。

标签: androidpersistenceandroid-room

解决方案


您始终可以使用 Room 运行自定义查询。也许您可以执行以下操作?

@Query("delete from old_table where id not in (:ids)")
int deleteOldItems(int[] ids);

编辑:

由于要匹配和删除的数据数量众多,如果您拆分查询,上述查询将无法满足您的目的。

如果我正确理解了这个问题,那么您可能会考虑这样做。

  1. 获取旧表中已经存在的 id 列表。
  2. 将该列表与您拥有的新 id 列表进行比较。您应该能够找到需要从表中删除的 id。
  3. 然后使用 ids (existing - new) 运行删除查询
  4. 然后使用新添加的项目列表在表中创建新条目。

您还可以在第 3 步和第 4 步中拆分删除和插入操作,因为它们不是冲突操作。


推荐阅读