Masalah Anda adalah Anda telah mencampuradukkan column_constraint sintaks dengan table_constraint sintaks (yaitu mengkodekan yang terakhir di mana yang pertama harus digunakan ).
Anda dapat memperbaiki masalah ini dengan menggunakan
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");
Seperti yang dijelaskan di bawah ini seperti sintaks alternatif.
Yaitu sintaks batasan kolom dimulai dengan REFERENCES ....
dan merupakan bagian dari definisi kolom (yaitu nama kolom tersirat), sedangkan sintaks table_constraint dimulai dengan FORIEGN KEY(column_name) REFERENCES ...
dan mengikuti definisi kolom
Jadi Anda bisa memiliki keduanya :-
Sintaks kendala_kolom
-
Sebagai bagian dari definisi kolom
-
category INTEGER NOT NULL REFERENCES categories (id)
misalnya
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)
atau
Sintaks batasan_tabel
-
setelah kolom telah ditentukan, tetapi masih dalam definisi kolom yaitu masih di dalam tanda kurung.
-
FOREIGN KEY (category) REFERENCES categories (id)
misalnya
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));
Anda mungkin menemukan column-constraint dan table-constraint penggunaan.
tanggal dapat berupa nama kolom. Namun, saya menyarankan agar tidak menggunakan kata kunci SQLite apa pun, seperti tanggal, sebagai nama kolom.