【问题标题】:Room DAO Update how best to handle old unwanted dataRoom DAO 更新如何最好地处理旧的不需要的数据
【发布时间】:2021-10-08 14:54:26
【问题描述】:

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

表中的预取 ID: |对象标识| |:-------| |1| |2| |3| |4|

表中的获取后 ID: |对象标识| |:-------| |1| |2| |4|

所以对象被移除: |对象标识| |:-------| |3|

我的问题: 最好的方法是在调用@insert 方法之前删除表中的所有条目,或者是否有另一种使用@update 的方法可以让我简单地获取新数据并删除不再在新对象列表中的所有旧数据?我的理解是 @update 只会更新对象 1,2 和 4 并保持 3 不变。

【问题讨论】:

    标签: android sql insert android-room dao


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,没想到@transaction方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 2010-10-01
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多