Android SQLlite 数据库使用外键连接错误


public static void onCreate(SQLiteDatabase db) {
    StringBuilder sb = new StringBuilder();
    sb.append("CREATE TABLE " + LecturesTable.TABLE_NAME + " (");
    sb.append(BaseColumns._ID + " INTEGER PRIMARY KEY, ");
    sb.append(LecturesColumns.TITLE + " TEXT, ");
    sb.append(LecturesColumns.SPEAKER_ID + " INTEGER, ");
    sb.append(LecturesColumns.START_TIME + " DATETIME, ");
    sb.append(LecturesColumns.END_TIME + " DATETIME, ");
    sb.append(LecturesColumns.TYPE + " TEXT, ");
    sb.append(LecturesColumns.PLACE_ID + " INTEGER, ");
    sb.append(LecturesColumns.DESCRIPTION + " TEXT, ");
    sb.append("FOREIGN KEY(" + LecturesColumns.SPEAKER_ID + ") "
            + "REFERENCES " + SpeakersTable.TABLE_NAME + "("
            + BaseColumns._ID + "), ");
    sb.append("FOREIGN KEY(" + LecturesColumns.PLACE_ID + ") "
            + "REFERENCES " + PlacesTable.TABLE_NAME + "("
            + BaseColumns._ID + ")");
    sb.append(");");
    db.execSQL(sb.toString());
}
public long insert(String[] data) {
        insertStatement.clearBindings();
        insertStatement.bindLong(1, Long.valueOf(data[0]));
        insertStatement.bindString(2, data[1]);
        insertStatement.bindLong(3, Long.valueOf(data[2]));
        insertStatement.bindString(4, data[3]);
        insertStatement.bindString(5, data[4]);
        insertStatement.bindString(6, data[5]);
        insertStatement.bindLong(7, Long.valueOf(data[6]));
        insertStatement.bindString(8, data[7]);
        return insertStatement.executeInsert();
    }

error android.database.sqlite.SQLiteConstraintException: 外键约束失败(代码 19)

您必须先启用外键支持

db.execSQL("PRAGMA foreign_keys = ON;");

编辑

您确定在扬声器表和位置表中具有正确值的行吗?

您可以添加约束名称,以便在失败时接收更准确的错误消息

"CONSTRAINT speakers FOREIGN KEY(" ...

错误代码 19 意味着您只是在插入方法中破坏了"NOT NULL"、"UNIQUE"等表约束

请查看 SQLiteErrorCode

最新更新