Mysql
 sql >> Database >  >> RDS >> Mysql

SQLite in Android:chiavi esterne e previsti

Il tuo problema è che hai confuso column_constraint sintassi con table_constraint sintassi (cioè codificato quest'ultimo dove dovrebbe essere usato il primo ).

Puoi risolvere il problema utilizzando

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");

Come spiegato di seguito, così come la sintassi alternativa.

Questa è la sintassi del vincolo di colonna che inizia con REFERENCES .... ed è parte della definizione della colonna (cioè il nome della colonna è implicito), mentre la sintassi table_constraint inizia con FORIEGN KEY(column_name) REFERENCES ... e segue le definizioni delle colonne

Quindi potresti avere entrambi :-

Sintassi colonna_vincolo

  • Come parte di una definizione di colonna

  • category INTEGER NOT NULL REFERENCES categories (id)

es.

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)

o

Sintassi table_constraint

  • dopo che le colonne sono state definite, ma sempre all'interno della definizione della colonna, cioè ancora tra parentesi.

  • FOREIGN KEY (category) REFERENCES categories (id)

ad esempio

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));

Potresti trovare column-constraint e table-constraint di utilizzo.

data può essere un nome di colonna. Tuttavia, suggerirei di non utilizzare alcuna parola chiave SQLite, come date, come nome di colonna.