我正在使用 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 ( ? )"