Váš problém je, že jste si spletli column_constraint syntaxe s table_constraint syntaxe (tj. zakódovaná druhá, kde by měla být použita první ).
Problém můžete vyřešit pomocí
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");
Jak je vysvětleno níže, stejně jako alternativní syntaxe.
To znamená, že syntaxe omezení sloupce začíná REFERENCES ....
a je součástí definice sloupce (tj. název sloupce je implicitní), zatímco syntaxe table_constraint začíná FORIEGN KEY(column_name) REFERENCES ...
a řídí se definicemi sloupců
Takže můžete mít buď :-
Syntaxe omezení sloupců
-
Jako součást definice sloupce
-
category INTEGER NOT NULL REFERENCES categories (id)
např.
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)
nebo
Syntaxe omezení tabulky
-
poté, co byly sloupce definovány, ale stále v rámci definice sloupce, tj. stále v závorkách.
-
FOREIGN KEY (category) REFERENCES categories (id)
např.
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));
Můžete najít column-constraint a table-constraint použití.
datum může být název sloupce. Navrhoval bych však, že je rozumné nepoužívat žádné klíčové slovo SQLite, jako je datum, jako název sloupce.