You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

更新Android Room数据库出现UNIQUE constraint failed错误如何解决?

问题根因

你当前触发的不是更新操作,而是插入操作。从报错堆栈可以明确看到调用链最终走的是insertPlant方法:当你给Plant对象传入了数据库中已存在的plant_id执行插入时,主键的唯一约束冲突就会抛出这个错误。

修复方案
  • 首先定位Edit_Plant.kt第98行的保存按钮点击逻辑,你现在写的是调用viewModel.insertPlant(),改成调用viewModel.updatePlant()即可
  • 如果你的编辑页需要同时兼容新增和编辑两种场景,可以加判断逻辑:
// plant对象的plant_id为0时代表是新增条目(autoGenerate主键默认未赋值时为0)
if (plant.plant_id == 0L) {
    plantViewModel.insertPlant(plant)
} else {
    plantViewModel.updatePlant(plant)
}
补充说明
  • Room的@Update注解操作必须依赖实体类的主键匹配要修改的条目,所以更新时必须携带数据库中已存在的唯一id,你当前Dao层的updatePlant配置(onConflict = OnConflictStrategy.REPLACE)是符合要求的
  • 你的INSERT功能正常是因为新增时你没有给plant_id赋值,Room会自动生成不重复的主键id,不会触发冲突

内容的提问来源于stack exchange,提问作者Edita Komarova

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:45:00