房间更新查询仅更新一行

时间:2018-06-08 09:03:14

标签: android sqlite sql-update android-room

我有一个Book对象,有3个主键(id,belongsToTab,propertyOfUserId)

说,我有一个像这样的书籍数据库:

  

book1(id = 10162,belongsToTab = 1,propertyOfUserId = 896)

     

book1(id = 10162,belongsToTab = 0,propertyOfUserId = 896)

在我的BookDao界面中,我制作了这样的方法:

@Query("UPDATE BOOK SET isArchived = 1 Where id in (:listId) and propertyOfUserId = :userId")
void updateBookArchived(List<Long> listId, long userId);

为了测试,我在listId内只有一个项目(10162)。调用此方法时,我提取数据库并发现只有一行(第一行,其中belongsToTab = 1)更新isArchived = 1.另一行仍为0(与之前相同)

但是如果我在sqlite浏览器中执行查询: UPDATE BOOK SET isArchived = 1 Where id in (10162) and propertyOfUserId = 896结果很完美,有2行更新。

我尝试传递List<Long>Long[],但没有运气。调试生成的文件BookDao_Impl我看到查询字符串就像

  

UPDATE BOOK SET isArchived = 1其中id在(?)和propertyOfUserId =?

(如果列表包含3个项目,那么它是... Where id in (?,?,?) and ....),所以我想将List传递给它是有效的。 我不知道出了什么问题。

感谢您宝贵的时间。

修改 我创建了一个简单的项目来测试问题,并且查询按预期工作。 ......“结构”或其他东西一定存在另一个问题。我希望我知道这个问题的可能原因是什么。

1 个答案:

答案 0 :(得分:0)

那是愚蠢的。来自API的新记录覆盖了最后一行。

我已经挣扎了2天,相信API是正确的。我的坏。