Android Room数据库能否通过对象参数执行更新操作?
你的Room数据库更新写法不可行
首先,你写的这种直接在@Query里用:model.videoStatus和:model.id的方式,Room是不支持的——Room的参数绑定不允许直接引用对象的嵌套属性,编译时会直接报错。
另外要注意,你这个函数实际执行的是UPDATE更新操作,但函数名起成了delete,这会造成语义混淆,建议改成updateVideoStatus这类贴合功能的名字。
给你两种可行的写法:
写法1:拆分对象属性为单独参数
把需要用到的字段从对象里拆出来作为函数参数,这是最直接的方式:
@Query("UPDATE video_info_table SET videoStatus = :videoStatus WHERE id = :id") fun updateVideoStatus(id: Int, videoStatus: Int)
调用的时候直接传入model.id和model.videoStatus即可。
写法2:使用Room的@Update注解(适用于更新整个实体)
如果你的FileModelClass是Room实体类,且id字段标记了@PrimaryKey主键注解,可以直接用@Update注解更新整个对象:
@Update fun updateVideo(model: FileModelClass)
不过这种方式会更新对象里的所有非主键字段,如果只想更新videoStatus这一个字段,还是写法1更高效。
内容的提问来源于stack exchange,提问作者Affan Ahmed
相关产品推荐
相关产品推荐

