首页 > 解决方案 > 房间更新查询只更新一行

问题描述

我有一个Book具有 3 个主键(id、belongToTab、propertyOfUserId)的对象

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

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

book1(id = 10162,belongToTab = 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. 调用这个方法时,我提取数据库,发现只有一行(第一个belongToTab = 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 where id in (?) and propertyOfUserId = ?

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

感谢您的宝贵时间。

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

标签: androidsqlitesql-updateandroid-room

解决方案


那很愚蠢。API 中有一条新记录覆盖了最后一行。

我挣扎了 2 天,相信 API 是正确的。我的错。


推荐阅读