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

Android Room删除SQLite文件无外键报787约束错误如何修复?

解决方案

错误码787属于SQLite外键约束违规,你贴出的Files表本身没有定义外键,问题出在项目其他表的关联配置上:其他表将Files表的FileID作为外键关联,默认的外键约束规则会禁止删除被其他表引用的主表记录,所以增查不受影响,只有删除操作触发报错。

你可以按以下步骤处理:

  1. 排查项目内所有Room实体类,找到带@ForeignKey注解、且parentTable指向Files的实体,确认关联字段。
  2. 根据业务需求选对应处理方案:
    • 如果业务需要保留关联子表记录,删除主表记录前先手动删除所有关联该FileID的子表记录,再执行Files表的删除操作。
    • 如果不需要单独保留子表记录,可以在子表的外键注解中添加onDelete = ForeignKey.CASCADE配置,这样删除Files表记录时,关联的子表记录会被自动同步删除,示例配置如下:
@Entity(
    tableName = "你自己的子表名",
    foreignKeys = @ForeignKey(
        entity = Files.class,
        parentColumns = "FileID",
        childColumns = "你子表里关联FileID的字段名",
        onDelete = ForeignKey.CASCADE
    )
)
public class 你的子表实体类 {
    // 原有实体逻辑不变
}
  1. 如果需要快速验证问题原因,可以临时在Room数据库构建配置中关闭外键约束,测试删除功能是否正常。仅用于测试验证,不要在线上环境关闭外键,会破坏数据一致性。

修改完外键配置后记得升级数据库版本,做对应的迁移,避免本地数据库报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:45:03