Проблемът ви е, че сте объркали column_constraint синтаксис с table_constraint синтаксис (т.е. кодира последния, където трябва да се използва първият ).
Можете да отстраните проблема, като използвате
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");
Както е обяснено по-долу, както и алтернативният синтаксис.
Това е синтаксисът на ограничението на колоната, започва с REFERENCES ....
и е част от дефиницията на колоната (т.е. името на колоната е имплицитно), докато синтаксисът на table_constraint започва с FORIEGN KEY(column_name) REFERENCES ...
и следва дефинициите на колоните
Така че можете да имате едно от двете :-
Синтаксис на ограничение на колона
-
Като част от дефиниция на колона
-
category INTEGER NOT NULL REFERENCES categories (id)
напр.
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)
или
Синтаксис на ограничение на таблица
-
след като колоните са били дефинирани, но все още в дефиницията на колоната, т.е. все още в скобите.
-
FOREIGN KEY (category) REFERENCES categories (id)
напр.
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));
Може да намерите column-constraint и table-constraint от употреба.
дата може да бъде име на колона. Въпреки това бих предложил, че е разумно да не използвате SQLite ключова дума, като дата, като име на колона.