android - Android房间批量删除键
问题描述
我有一个我之前填充的对象表和一个包含数千个应该在表中的对象的新列表。如果 id 列表中不存在其主键,我想删除表中的每个对象。基本上是批量删除以摆脱旧项目。有没有一种简单的方法可以用 Room 做到这一点?我在文档中没有看到它,但也许我忽略了它。
更清楚地说,我的 id 列表是我不想删除的项目列表,并且超过了变量的 999 sql 限制。
解决方案
您始终可以使用 Room 运行自定义查询。也许您可以执行以下操作?
@Query("delete from old_table where id not in (:ids)")
int deleteOldItems(int[] ids);
编辑:
由于要匹配和删除的数据数量众多,如果您拆分查询,上述查询将无法满足您的目的。
如果我正确理解了这个问题,那么您可能会考虑这样做。
- 获取旧表中已经存在的 id 列表。
- 将该列表与您拥有的新 id 列表进行比较。您应该能够找到需要从表中删除的 id。
- 然后使用 ids (existing - new) 运行删除查询
- 然后使用新添加的项目列表在表中创建新条目。
您还可以在第 3 步和第 4 步中拆分删除和插入操作,因为它们不是冲突操作。
推荐阅读
- python - 使用 Prisma Cloud API 向现有策略添加合规标准的格式是什么?
- php - php,linux服务器上的sqlsrv_connect问题
- c++ - 为什么必须将动态分配的数组从 main 传递给 c++ 中的函数?
- c# - xUnit 检查类或方法上是否存在属性
- javascript - 如何从 asp.net 的母版页导入 jquery 插件
- python - 使用 CLI 在 IBM Cloud 中推送 Python Flask Web 服务时启动不成功
- android - 如何从 Activity B/Class B 在 firebase 数据库中创建对象,然后在 Activity A/ClassA 中列出所述对象
- r - 计算分组平均值并填充到 R 的新列中
- javascript - Javascript 更改 DOM 是否总是导致 UI 更新?
- javascript - 包括对现有网页的反应 - 多个反应组件