Twój problem polega na tym, że pomyliłeś column_constraint składnia z table_constraint składnia (tj. zakodowana druga tam, gdzie powinna być użyta pierwsza ).
Możesz rozwiązać problem, używając
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 wyjaśniono poniżej, podobnie jak alternatywna składnia.
Oznacza to, że składnia ograniczenia kolumny zaczyna się od REFERENCES ....
i jest częścią definicji kolumny (tzn. nazwa kolumny jest niejawna), podczas gdy składnia table_constraint zaczyna się od FORIEGN KEY(column_name) REFERENCES ...
i podąża za definicjami kolumn
Możesz więc mieć:-
Składnia kolumny_ograniczenia
-
Jako część definicji kolumny
-
category INTEGER NOT NULL REFERENCES categories (id)
np.
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)
lub
Składnia Table_constraint
-
po zdefiniowaniu kolumn, ale nadal w definicji kolumny, tj. nadal w nawiasach.
-
FOREIGN KEY (category) REFERENCES categories (id)
np.
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));
Możesz znaleźć column-constraint i ograniczenie tabeli użytkowania.
data może być nazwą kolumny. Sugeruję jednak, aby nie używać żadnego słowa kluczowego SQLite, takiego jak data, jako nazwy kolumny.