【问题标题】:Room update query only update one row房间更新查询只更新一行
【发布时间】:2018-06-08 09:03:13
【问题描述】:

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

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

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 中只有一项(即 10162)。调用这个方法时,我提取数据库,发现只有一行(belongToTab = 1的第一行)被更新isArchived = 1。另一行仍然是0(和之前一样)

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

我尝试通过 List&lt;Long&gt;Long[] 但没有运气。调试生成的文件BookDao_Impl我看到查询字符串是这样的

UPDATE BOOK SET isArchived = 1 where id in (?) and propertyOfUserId = ?

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

感谢您宝贵的时间。

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

【问题讨论】:

  • 正如你提到的“为了测试,我只有一个项目” 那么你为什么期望 SQLite 应该更新不止一行? SQLite 浏览器中的 AFAIK 用于测试您可以插入虚拟记录并测试您的查询。向数据库中添加多条记录并尝试更新行。
  • 我的意思是 id 列表中只有一项,而不是一行。我希望它更新 2 行,因为两行具有相同的 id 和相同的 propertyOfUserId,我不在乎 belongToTab 属性是什么,只需要它具有提供的 idpropertyOfUserId

标签: android sqlite sql-update android-room


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-07-03
    • 1970-01-01
    • 2019-08-26
    • 2019-01-17
    • 2013-05-14
    • 2015-06-02
    • 2017-12-07
    • 2021-02-21
    • 1970-01-01
    相关资源
    最近更新 更多