Room DAO 更新如何最好地处理旧的不需要的数据

Room DAO Update how best to handle old unwanted data

我有一个房间 table 的对象,当我收到网络调用以刷新对象列表时,这些项目可能已经更改。所以我需要删除新获取列表中不再存在的所有数据。

Table 中的预取 ID: |对象编号| |:--------| |1| |2| |3| |4|

Post-在 Table 中获取 ID: |对象编号| |:--------| |1| |2| |4|

因此删除了对象: |对象编号| |:--------| |3|

我的问题: 最好的方法是在调用 @insert 方法之前删除 table 中的所有条目,还是有另一种使用 @ 的方法更新允许我简单地获取新数据并删除所有不再在新对象列表中的旧数据?我的理解是 @update 将简单地更新对象 1,2 和 4 并保持原样 3。

因为你有一个 id 列表(假设这些唯一标识行),那么你可以根据列表更新并使用 WHERE 子句根据列表删除(更新之前或之后)利用 NOT IN operator(s)

  • 请注意,删除应该通过 @Query 而不是 @Delete 来完成,例如@QUERY("DELETE FROM the_table WHERE id NOT IN(:the_id_list);"

这将最大限度地减少删除次数。删除和更新应该在单个 transaction.

内完成