我已经尝试了我在 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))");
}
有人可以帮助我吗? 方法代码:
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;
最佳答案
您似乎有两个问题/误解。
首先是指定外键不会自动选择合适的值并使用这样的值更新列。而是定义一个外部添加一个约束,该约束表明该值必须是存在于父表的相应列中的值。如果不是,则会发生冲突。
因此,您必须确定一个合适的值(在您的情况下是一个现有的 IDENTIFICATION 值)。
其二是Android自带的SQLite,默认是没有开启外键支持的。可以通过以下任一方式打开外键支持
- foriegn_keys pragma 打开支持
- 或使用SQliteDatabase方法 setForeignKeyConstraintsEnabled
注意不能在事务中打开外键支持。因此,建议尽快打开外键支持。
- 如果用作 SQLiteOpenHelper 的子类,则建议覆盖 onConfigure 方法并使用 setForeignKeyConstraintsEnabled 方法。
关于java - SQLite 外键为空 Android Studio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53728746/