आपकी समस्या यह है कि आपने 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 ...
से शुरू होता है। और स्तंभ परिभाषाओं का अनुसरण करता है
तो आपके पास या तो हो सकता है :-
Column_constraint सिंटैक्स
-
स्तंभ परिभाषा के भाग के रूप में
-
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)
या
Table_constraint सिंटैक्स
-
कॉलम को परिभाषित करने के बाद, लेकिन फिर भी कॉलम परिभाषा के भीतर यानी अभी भी ब्रैकेट के अंदर।
-
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 कीवर्ड, जैसे दिनांक, को कॉलम नाम के रूप में उपयोग न करना बुद्धिमानी है।