Android sqlite外键错误检查不起作用?

问题描述

我有2个表Users和Computers

用户=(id,名称,年龄)

id->主键

计算机=(comp_id,comp_model_name,user_id)

comp_id->主键

user_id->用户表user_id字段的外键。 因为我希望一个人可以使用一台计算机。

if (db != null) {
        if (!db.isReadOnly) {
            db.execsql("PRAGMA foreign_keys=ON;");
        }
    }

db?.execsql(
    "create table Users " +
            "(id integer primary key,name text,age integer)"
)


db?.execsql(
    "create table Computers " +
            "(id integer primary key,model_name text,user_id integer," +
            " FOREIGN KEY (user_id) references Users (id))")

我看到的问题是,如果为计算机对象的第三个字段指定了不在Users表ID字段中的值,则不会引发错误。它正在接受值。

解决方法

要启用外键约束支持,您必须在SQLiteOpenHelper类中覆盖onConfigure()并调用setForeignKeyConstraintsEnabled(true)

override fun onConfigure(db: SQLiteDatabase) {
    db.setForeignKeyConstraintsEnabled(true)
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...