Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLlite数据库使用外键连接获取错误_Android_Sqlite - Fatal编程技术网

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

Android SQLlite数据库使用外键连接获取错误,android,sqlite,Android,Sqlite,错误android.database.sqlite.SQLiteConstraintException:外键约束失败(代码19) 您必须首先启用外键支持 public static void onCreate(SQLiteDatabase db) { StringBuilder sb = new StringBuilder(); sb.append("CREATE TABLE " + LecturesTable.TABLE_NAME + " ("); sb.append(

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


您必须首先启用外键支持

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();
    }
编辑 您确定SpeakersTable和PlacesTable中的行具有正确的值吗

如果失败,可以添加约束名称以接收更准确的错误消息

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

错误代码19意味着您只是在insert方法中打破了表约束,如“NOTNULL”、“UNIQUE”等


请看

stll不工作,这是我的openhelper方法public void onOpen(final SQLiteDatabase db){super.onOpen(db);if(!db.isReadOnly()){db.execSQL(“PRAGMA foreign_key=ON;”);Cursor c=db.rawQuery(“PRAGMA foreign_key”,null);if(c.moveToFirst()){int result=c.getInt(0);Log.d(“DEBUG”,SQLite外键支持(1打开,0关闭):“+result);}else{Log.d(“调试”,“SQLite外键支持不可用”);}如果(!c.isClosed()){c.close();}}}显示一些示例数据,以及实际失败的SQL语句。
"CONSTRAINT speakers FOREIGN KEY(" ...