我在android中创建了两个sqlite表
带有主键" id" 的 phone table
CREATE TABLE BLOCKED_PHONES_TABLE ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL DEFAULT 1, KEY_PHONE TEXT UNIQUE,KEY_IS_BLOCKED BIT )
comment table
使用外键" 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条评论。
comment table
为什么不将id
作为外键?
否则它不会在phone
表格中找不到ID。
我怎么知道我的sqlite版本?
修改 我补充说:
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL("PRAGMA foreign_keys=ON;");
phoneDal.onCreate(sqLiteDatabase);
commentDal.onCreate(sqLiteDatabase);
}
答案 0 :(得分:1)
首先,您需要检查您的SQLite版本,因为所有版本都不支持外键,如果您使用的是较新版本,则必须打开该功能,以便向后兼容此功能默认情况下已关闭,请仔细阅读以下链接,以便更好地了解如何操作。
http://www.sqlite.org/faq.html#q22
https://www.sqlite.org/foreignkeys.html
并启用它
db.execSQL("PRAGMA foreign_keys=ON;");
希望这有助于.... :)