Vấn đề của bạn là bạn đã trộn column_constraint cú pháp với table_constraint cú pháp ( tức là viết mã cái sau, nơi cái trước nên được sử dụng ).
Bạn có thể khắc phục sự cố bằng cách sử dụng
db.execSQL("CREATE TABLE " + QUEST_TABLE_NAME + "(id INTEGER primary key autoincrement NOT NULL, name TEXT, description TEXT, expValue INTEGER, category INTEGER NOT NULL REFERENCES categories (id), date TEXT");
Như được giải thích bên dưới cũng như cú pháp thay thế.
Đó là cú pháp ràng buộc cột bắt đầu bằng REFERENCES ....
và là một phần của định nghĩa cột (nghĩa là tên cột là ẩn), trong khi cú pháp table_constraint bắt đầu bằng FORIEGN KEY(column_name) REFERENCES ...
và tuân theo các định nghĩa cột
Vì vậy, bạn có thể có một trong hai:-
Cú pháp Column_constraint
-
Là một phần của định nghĩa cột
-
category INTEGER NOT NULL REFERENCES categories (id)
ví dụ:
CREATE TABLE yourtablename (id INTEGER primary key autoincrement NOT NULL, name TEXT, description TEXT, expValue INTEGER, category INTEGER NOT NULL REFERENCES categories (id), date TEXT)
hoặc
Cú pháp table_constraint
-
sau khi cột đã được xác định, nhưng vẫn nằm trong định nghĩa cột, tức là vẫn nằm trong dấu ngoặc.
-
FOREIGN KEY (category) REFERENCES categories (id)
ví dụ:
CREATE TABLE yourtablename (id INTEGER primary key autoincrement NOT NULL, name TEXT, description TEXT, expValue INTEGER, category INTEGER NOT NULL, date TEXT, FOREIGN KEY (category) REFERENCES categories (id));
Bạn có thể tìm thấy cột-ràng buộc và bảng ràng buộc sử dụng.
ngày có thể là một tên cột. Tuy nhiên, tôi khuyên bạn nên không sử dụng bất kỳ từ khóa SQLite nào, chẳng hạn như ngày tháng, làm tên cột.