房间更新查询
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
的内容。
以上是关于房间更新查询的主要内容,如果未能解决你的问题,请参考以下文章