android - SQL 删除 NOT IN 不起作用的地方

标签 android sql sqlite android-room android-components

我正在使用 Android 组件中的 room 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

因此,当我收到必须保存的新列表时,我会创建下一个带有 ids 的字符串:"'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 ( ? )"

最佳答案

更改 deleteUniqueData() 以采用 ID 列表或数组作为参数。不要自己组装逗号分隔的列表。 Room 就是这么做的。

关于android - SQL 删除 NOT IN 不起作用的地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48130104/

相关文章:

sql - 无法创建唯一索引 - 声称具有重复值但实际上没有

android - 如何发现 Android 应用程序中前台的 Activity?

java - 在警报对话框中获取用户选择

mysql - "Where"语句 : match a single word (not substring)

mysql - 如何在 MySQL 表中存储数据以便快速访问?

android - Android 2.1 和 2.2 之间的 SQLite 差异

sql - SQLite UPDATE语句中的相关子查询(或等效查询)?

android - Android Studio许可证未被接受错误

android - 如何避免在 Activity 转换时淡入黑色?

ruby-on-rails-3 - 关于在生产中使用 PG 数据库,我需要了解什么?