如何修复没有约束的 Foreign FOREIGN KEY constraint failed (code 787) 错误?

How can I fix a Foreign FOREIGN KEY constraint failed (code 787) error that doesn't have a Constraint?

问题: 当我尝试删除存储在 SQLite 数据库中的文件时,我收到了 FOREIGN CONSTRAINT 错误(代码 787)。其他一切都适用于添加(即 insert)文件甚至读取(打开)它们。我只是无法删除它们。

我尝试过的方法:我读过 4-5 post 篇,称其为已知问题。我认为 post 涉及一种冲突。类型冲突可能是一种可能性,除非我可以 insert 和阅读(打开)就好了。我认为这不是我的问题……也许吧,但我不确定。在走那么远之前,我想我会在这里post。我仍在了解 Android Room 和 Android 的总体情况,但可以参考比我更博学的人的一些见解。

错误发生的地方

rdb.getFilesDao().deleteFile(bFile);

Files.java(实体)

@Entity(tableName = "Files")
public class Files implements Parcelable {

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "FileID")
    private int fileID;

    @ColumnInfo(name = "FileName")
    private String fileName;

    @TypeConverters(FileTypeConverter.class)
    @ColumnInfo(name = "FileData", typeAffinity = ColumnInfo.TEXT)
    private byte[] fileData;

    @SuppressWarnings(RoomWarnings.CURSOR_MISMATCH)
    public Files(int fileID, String fileName, byte[] fileData){
        this.fileID = fileID;
        this.fileName = fileName;
        this.fileData = fileData;
    }

    public Files(Parcel in){
        this.fileID = in.readInt();
        this.fileName = in.readString();
        this.fileData = in.createByteArray();
    }

    public static final Creator<Files> CREATOR = new Creator<Files>() {
        @Override
        public Files createFromParcel(Parcel in) {
            return new Files(in);
        }

        @Override
        public Files[] newArray(int size) {
            return new Files[size];
        }
    };

FilesDao.java(道)

    @Dao
    public interface FilesDao {
        @Insert
        long addFile(Files file);
        @Update
        void updateFile(Files file);
        @Delete
        void deleteFile(Files file);
    
        @Query("SELECT * FROM Files")
        List<Files> getFiles();
        @Query("SELECT * FROM Files WHERE FileID = :fileID")
        Files getFile(int fileID);
    }

文件结构 (json)

    "tableName": "Files",
    "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`FileID` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `FileName` TEXT, `FileData` TEXT)",
    "fields": [
      {
        "fieldPath": "fileID",
        "columnName": "FileID",
        "affinity": "INTEGER",
        "notNull": true
      },
      {
        "fieldPath": "fileName",
        "columnName": "FileName",
        "affinity": "TEXT",
        "notNull": false
      },
      {
        "fieldPath": "fileData",
        "columnName": "FileData",
        "affinity": "TEXT",
        "notNull": false
      }
    ],
    "primaryKey": {
      "columnNames": [
        "FileID"
      ],
      "autoGenerate": true
    },
    "indices": [],
    "foreignKeys": []
  },

已更新 添加图片以辅助 comment/questions:

在 Susan Mustafa 的帮助和评论下,我只是在尝试删除文件时以错误的代码顺序加入了 table 依赖项。一旦我颠倒了与文件有关的代码的顺序,Foreign Key 错误就消失了。我应该抓住这个但没有,在删除主要之前应该先删除外键依赖项。

顺序相反:

rdb.getFilesByNoteDao().delete(new FilesByNote(id, oFile.getFileID()));
rdb.getFilesDao().deleteFile(oFile);