【问题标题】:How does @Update work in Android Room?@Update 如何在 Android Room 中工作?
【发布时间】:2017-12-03 02:54:36
【问题描述】:
我在 Room 数据库中有数据,我想检查它是否等于某些数据并相应地更新一行,例如:
if (dataInDatabase.equals(providedData)) {
// update existing data.
}
我唯一拥有的@PrimaryKey 是一个自动生成的ID,并且没有@ForeignKeys。我知道现有数据只能使用@PrimaryKey 更新,但我检查的数据不是@PrimaryKeys。解决这个问题的最佳方法是什么?我如何迭代和使用.equals() 方法来迭代数据库中的所有数据并在满足条件时更新某些行?
【问题讨论】:
标签:
java
android
sqlite
persistence
android-room
【解决方案1】:
如果您的查询是简单的 CRUD(创建、读取、更新和删除)操作,Room 为您提供了使用注释的机会。但是,如果您觉得您的查询更具体,您可以选择定义一种方法来处理您想要的目标,并使用@query() 注释对其进行注释,并将您的 SQL 查询作为参数传递给它。
根据您的情况,您可以考虑使用类似
的方法
@query("put your update query here")
udateMytable(String data); // pass the data to this method as its arguments
【解决方案2】:
您可以使用以下代码进行更新
有一个可用于更新 @Update 的注释。这将更新您在数据库中的数据。
例如
@Update
public void updateUsers(User... users);