SQLite外键为空AndroidStudio

thtygnil  于 2022-12-16  发布在  Android
关注(0)|答案(1)|浏览(156)

我已经尝试了所有我在Stackoverflow这里找到的东西,但没有帮助我,这就是为什么我问一次。我试图在Android中用SQLite做一个数据库,但当我打开我的数据库,看看我的程序保存了什么,我有这个外键总是空值。这里是我的代码:

@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;
gijlo24d

gijlo24d1#

您似乎有两个问题/误解。
第一个问题是,定义外键并不会自动选择合适的值并用该值更新列,而是会添加一个约束,要求该值必须是父表中相应列中存在的值,否则将发生冲突。
因此,您必须确定一个合适的值(在您的情况下,是现有的IDENTIFICATION值)。
第二个原因是Android提供的SQLite默认情况下不启用外键支持。

*foriegn_keys杂注打开支持

  • 或通过使用SQliteDatabase方法setForeignKeyConstraintsEnabled

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

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

相关问题