sqlite 房间更新查询

vxqlmq5t  于 2022-11-15  发布在  SQLite
关注(0)|答案(2)|浏览(159)

我正在使用适用于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
}

与DELETE、INSERT类似的查询可以很好地工作。底层查询应该找到产品的id并更新所有字段,但它不起作用。请不要写INSERT QUERY而是UPDATE,这是一个肮脏的把戏。

**UPDATE:**UPDATE方法返回0,表示不工作,根据文档,应该返回更新记录的Num:

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

3pvhb19x

3pvhb19x1#

你可以试试这个

@Query("UPDATE products SET price=:price WHERE id = :id")
void update(Float price, int id);
3xiyfsfu

3xiyfsfu2#

关于文档,它说你必须做这样的事情:

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

您还可以控制onConflict发生的情况。请注意,如果您不指定,默认情况下它是OnConflictStrategy.ABORT,它回滚事务并且不执行任何操作。因此,您可能需要添加类似于@Update(onConflict = OnConflictStrategy.REPLACE)的内容。

相关问题