Android SQLlite数据库使用外键连接获取错误
错误android.database.sqlite.SQLiteConstraintException:外键约束失败(代码19)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(
您必须首先启用外键支持
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(" ...