【发布时间】:2021-12-19 13:01:15
【问题描述】:
问题:我在尝试删除存储在 SQLite 数据库中的文件时收到 FOREIGN CONSTRAINT 错误(代码 787)。其他一切都适用于添加(即insert)文件,甚至读取(打开)它们。我只是无法删除它们。
我的尝试:我已经阅读了 4-5 篇文章,称这是一个已知问题。我认为一个帖子涉及一种冲突。类型冲突可能是一种可能性,除非我可以 insert 并阅读(打开)就好了。我认为这不是我的问题……也许吧,但我不确定。在走那么远之前,我想我会在这里发帖。我仍在学习有关 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": []
},
更新添加图片以帮助评论/问题:
【问题讨论】:
-
您是否从设备中提取了数据库进行检查?
-
hmmm,您向我们展示了文件信息,但还有其他东西,使用文件吗?那可能和它有关系?这就是为什么你不能删除它
-
@forpas - 是的,我已将模拟器中的副本保存到桌面并使用 SQLite Studio 对其进行检查。我将添加它的图像。
-
@svstackoverflow 也许我的问题不清楚。这些表中的任何一个(Author_by_source、Authors、Comments、Files_By_Note、Notes、Questions、Quotes、Sources、Terms、Topics)是否与(Files)有关系
-
@Susan Mustafa - 啊,是的,有一个 FilesByNote 关系,呵呵!我可以看到这会产生影响。我会看看是不是这个问题。
标签: java android sqlite foreign-keys