我正在使用Android Components中的room dao。我需要的是:插入列表,但之前 - 删除ID与新列表中id不同的数据库中的所有数据。
这是我简单的Data类:
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
因此,当我收到必须保存的新列表时,我使用id创建下一个String:"'0','1'"
并调用方法deleteUniqueData
。
但每次我调用它时,我收到2
作为结果,这意味着删除了2行。
有趣的部分:当我更换
"WHERE data_id NOT IN ( :listOfId )")
同
"WHERE data_id NOT IN ('0','1')") //same data but hardcoded
我收到0
作为结果。所以看起来这是Room的一些问题。
任何想法为什么NOT IN不起作用?或者它是如何修复的?
UPDATE
这里是生成的查询:
"DELETE FROM MY_TABLE WHERE data_id NOT IN ( ? )"
更改deleteUniqueData()
以获取ID列表或数组作为参数。不要自己组装逗号分隔的列表。房间那样做。