房间更新查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了房间更新查询相关的知识,希望对你有一定的参考价值。

我正在使用android的Room Persistence库,并尝试对布尔字段进行“更新”查询。

@Update
suspend fun updateProduct(product: Product)

产品实体:

@Entity(tableName = "products")
data class Product(
    @ColumnInfo(name = "name") val name: String = "",
    @ColumnInfo(name = "price") val price: Int = 0,
    @ColumnInfo(name = "count") val count: Int = 0,
    @ColumnInfo(name = "description") val description: String = "",
    @ColumnInfo(name = "isPurchased") val isPurchased : Boolean = false
) 
    @PrimaryKey var id: String = UUID.randomUUID().toString()
    @ColumnInfo(name = "date") var date: Long = Date().time

与删除类似的查询,插入效果很好。底层查询应该找到产品的ID并更新所有字段,但是它不起作用。请不要写关于插入查询,而要写更新,这是一个肮脏的把戏。

Update: update方法返回0,这意味着它不起作用,根据文档,它应该返回num个更新记录:

尽管通常不是必需的,但是您可以让此方法返回一个int值,表示数据库中已更新的行数。

答案

您可以尝试这个

@Query("UPDATE products SET price=:price WHERE id = :id")
void update(Float price, int id);
另一答案

关于文档,它说您必须执行以下操作:

@Update 
fun updateProduct(product: Product) // no need of suspend

您还可以控制会发生什么onConflict。请注意,如果默认情况下未指定,则回滚事务且不执行任何操作的是onConflict。因此,您可能想添加类似OnConflictStrategy.ABORT的内容。

以上是关于房间更新查询的主要内容,如果未能解决你的问题,请参考以下文章

房间从查询返回 kotlin 元组

房间数据库全动态查询

如何在房间数据库dao中附加两个或多个子查询,而这些子查询存储在变量中

SQL - 触发更新错误

使用子查询对房间价格求和时出错

如何在运行时动态查询房间数据库?