SQLite外键为空AndroidStudio

时间:2018-12-11 16:49:16

标签: java android sqlite

我已经尝试了所有在Stackoverflow中找到的所有内容,但没有任何帮助,这就是为什么我再次询问的原因。我尝试在android中使用sqlite创建数据库,但是当我打开数据库以查看程序保存的内容时,通过此外键始终具有null值。 这是我的代码:

@Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table " + TABLE_PERSON +" (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, IDENTIFICATION INTEGER)");
        db.execSQL("create table " + TABLE_LOCATION +" (ID INTEGER PRIMARY KEY AUTOINCREMENT, LOCATION TEXT, EMPLOYEE INTEGER , FOREIGN KEY(EMPLOYEE) REFERENCES person_table(IDENTIFICATION))");
}

Screen of sqldatabse

有人可以帮助我吗? 方法代码:

public boolean addDataToLocation(String Location){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COLL_2, Location);

    long result = db.insert(TABLE_LOCATION, null, contentValues);
    if(result == -1)
        return false;
    else
        return true;

1 个答案:

答案 0 :(得分:2)

您似乎有两个问题/误解。

第一个是指定外键不会自动选择合适的值并使用该值更新列。而是定义一个外来变量会添加一个约束,该约束说该值必须是父表的相应列中存在的值。如果没有,则会发生冲突。

因此,您必须确定一个合适的值(在您的情况下为现有的 IDENTIFICATION 值)。

第二个是Android随附的SQLite,默认情况下未启用外键支持。可以通过使用

来打开外键支持

请注意,不能在事务中打开外键支持。因此,建议尽快打开外键支持。

  • 如果用作SQLiteOpenHelper的子类,则建议覆盖 onConfigure 方法,并使用 setForeignKeyConstraintsEnabled 方法。