gpt4 book ai didi

android - sqlite 忽略我的外键约束

转载 作者:行者123 更新时间:2023-11-29 12:29:49 25 4
gpt4 key购买 nike

我在android中创建了两个sqlite表

电话表,主键为“id”

CREATE TABLE BLOCKED_PHONES_TABLE ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL DEFAULT 1, KEY_PHONE TEXT UNIQUE,KEY_IS_BLOCKED BIT )

评论表,带有外键“id”

CREATE TABLE COMMENTS_TABLE ( id INTEGER, KEY_COMMENT_TEXT TEXT, FOREIGN KEY(id) REFERENCES BLOCKED_PHONES_TABLE(id))

代码:

@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_BLOCKED_PHONES_TABLE =
"CREATE TABLE "+ BLOCKED_PHONES_TABLE +
" ( "+ KEY_ID+" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL DEFAULT 1, "
+ KEY_PHONE + " TEXT UNIQUE,"
+ KEY_IS_BLOCKED+" BIT )";

db.execSQL(CREATE_BLOCKED_PHONES_TABLE);
}

@Override
public void onCreate(SQLiteDatabase db) {
// SQL statement to create book table

String CREATE_COMMENTS_TABLE =
"CREATE TABLE " + COMMENTS_TABLE +
" ( "+ KEY_ID+" INTEGER, "
+ KEY_COMMENT_TEXT+" TEXT, "
+ "FOREIGN KEY("+KEY_ID+") REFERENCES "+PhoneDal.BLOCKED_PHONES_TABLE+"("+KEY_ID+"))";

db.execSQL(CREATE_COMMENTS_TABLE);

}

我添加了一些数据。

包括对同一部手机的 2-3 条评论。

enter image description here enter image description here

为什么评论表不将id引用为外键?

否则它不会有 phone 表中缺少的 ID。

如何知道我的 sqlite 版本?

enter image description here

编辑我补充道:

@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL("PRAGMA foreign_keys=ON;");
phoneDal.onCreate(sqLiteDatabase);
commentDal.onCreate(sqLiteDatabase);
}

最佳答案

您好,首先您需要检查您的 SQLite 版本,因为所有版本都不支持外键,如果您使用的是较新版本,那么您必须打开该功能,因为为了向后兼容,该功能默认情况下处于关闭状态,请访问以下链接以更好地了解如何操作。

http://www.sqlite.org/faq.html#q22
https://www.sqlite.org/foreignkeys.html

并启用它使用

       db.execSQL("PRAGMA foreign_keys=ON;");

希望这有帮助......:)

关于android - sqlite 忽略我的外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27731206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com