java - SQLite 外键为空 Android Studio

标签 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;

最佳答案

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

首先是指定外键不会自动选择合适的值并使用这样的值更新列。而是定义一个外部添加一个约束,该约束表明该值必须是存在于父表的相应列中的值。如果不是,则会发生冲突。

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

其二是Android自带的SQLite,默认是没有开启外键支持的。可以通过以下任一方式打开外键支持

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

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

关于java - SQLite 外键为空 Android Studio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53728746/

相关文章:

python - 使用 sqlite 在 python 中使用 cursor.execute 和 cursor.fetchall 的问题

java - 在 java binarySearch 中使用多个比较器

java - JFrame 中未显示菜单栏

java - 从 murmur3 Guava 中只获得正多头

android - 如何使用android.view.SurfaceView

c# - 短小精悍: "Insufficient parameters supplied to the command"

Java用时间戳计算时间

java - 在 onNavigationItemSelected 上获取微调器的项目文本

java - Android 在某些部分显示文本语言错误

iphone - 除了 Firefox 扩展之外,Mac 上还有其他好的 SQLite 图形管理工具吗?