1

我正在使用 Android 组件中的 room dao。我需要的是:插入列表,但之前 - 从 db 中删除所有数据,其 id 与新列表中的 id 不同。

这是我的简单数据类:

class Data{
   String id; //unique for each data class

   //some other data parameters here
}

我的任务的最佳选择是使用DELETE WHERE NOT IN someArray. 这是我的代码中的示例:

@Query("DELETE " +
        "FROM MY_TABLE " +
        "WHERE data_id NOT IN ( :listOfId )")
abstract protected fun deleteUniqueData(listOfId:String):Int

因此,当我收到必须保存的新列表时,我会使用 ids: 创建下一个 String"'0','1'"并调用 method deleteUniqueData

但是每次我调用它时,我都会收到2结果,这意味着有 2 行被删除。

有趣的部分:当我更换

"WHERE data_id NOT IN ( :listOfId )")

"WHERE data_id NOT IN ('0','1')") //same data but hardcoded

我收到0结果。所以看起来Room有问题。

任何想法为什么NOT IN不起作用?或者如何修复?

更新

这是生成的查询:

"DELETE FROM MY_TABLE WHERE data_id NOT IN ( ? )"
4

1 回答 1

1

更改deleteUniqueData()为将 ID 列表或数组作为参数。不要自己组装逗号分隔的列表。房间就是这样做的。

于 2018-01-06T18:08:19.047 回答