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)
}