SQL删除NOT IN不起作用

时间:2018-01-06 17:45:17

标签: android sql sqlite android-room android-components

我正在使用Android Components的房间dao。 我需要的是:插入列表,但之前 - 删除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

因此,当我收到必须保存的新列表时,我使用ID创建下一个字符串:"'0','1'"并调用方法deleteUniqueData

但每次我打电话给我时,都会收到2作为结果,这意味着删除了2行。

有趣的部分:当我替换

"WHERE data_id NOT IN ( :listOfId )")

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

我收到0作为结果。所以看起来它是房间的一些问题。

NOT IN 的任何想法都不起作用?或者它是如何修复的?

更新

这里是生成的查询:

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

1 个答案:

答案 0 :(得分:0)

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