Dit problem er, at du har blandet column_constraint sammen syntaks med table_constraint syntaks (dvs. kodet sidstnævnte, hvor førstnævnte skal bruges ).
Du kan løse problemet ved at bruge
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");
Som forklaret nedenfor, ligesom den alternative syntaks.
Det er den kolonne begrænsning syntaks starter med REFERENCES ....
og er en del af kolonnedefinitionen (dvs. kolonnenavnet er implicit), mens table_constraint-syntaksen starter med FORIEGN KEY(column_name) REFERENCES ...
og følger kolonnedefinitionerne
Så du kunne have enten :-
Column_constraint-syntaks
-
Som en del af en kolonnedefinition
-
category INTEGER NOT NULL REFERENCES categories (id)
f.eks.
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)
eller
Table_constraint-syntaks
-
efter at kolonnerne er blevet defineret, men stadig inden for kolonnedefinitionen, dvs. stadig inden for parentes.
-
FOREIGN KEY (category) REFERENCES categories (id)
f.eks.
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));
Du kan finde column-constraint og table-constraint til brug.
dato kan være et kolonnenavn. Jeg vil dog foreslå, at det er klogt ikke at bruge noget SQLite-nøgleord, såsom dato, som et kolonnenavn.