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

Room未更新现有预设数据库 移除字段唯一约束后仍报错如何解决

问题原因及解决步骤

你遇到的报错是因为Room的schema校验逻辑和预设数据库修改不完整导致,常见的遗漏操作如下:

  • 没有同步修改Room对应的Driver实体类注解:如果你在drivingLicNum字段上标注了@ColumnInfo(unique = true),或是在类头部的@Table注解的uniqueConstraints参数中配置了该字段的唯一约束,哪怕你修改了预设数据库的建表语句,Room在初始化时会按照实体类配置校验数据库schema,匹配失败就会报错,甚至会自动给字段加回唯一约束。
  • assets目录下的预设数据库文件没有正确更新:SQLite不支持直接修改字段删除约束,你不能仅修改建表语句就完成约束移除,需要执行「新建无约束的Driver表→导入旧数据→删除旧表→重命名新表」的完整流程,才能真正把约束从db文件中删除。修改完成后要确认打包到APK里的assets/databases/myprefdefdb.db是最新版本,可以解压APK后用SQLite工具打开直接检查表结构确认。
  • 没有升级Room数据库的版本号:哪怕你开启了fallbackToDestructiveMigration,如果@Database注解中的version值没有升级,Room会判定数据库无需变更,不会触发重新从asset加载数据库的逻辑。建议你将版本号加1后重新编译运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:06:03