Mysql
 sql >> Base de données >  >> RDS >> Mysql

SQLite sous Android :clés étrangères et attendues

Votre problème est que vous avez mélangé column_constraint syntaxe avec table_constraint syntaxe (c'est-à-dire codé ce dernier là où le premier doit être utilisé ).

Vous pouvez résoudre le problème en utilisant

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

Comme expliqué ci-dessous, tout comme la syntaxe alternative.

C'est-à-dire que la syntaxe de contrainte de colonne commence par les REFERENCES .... et fait partie de la définition de la colonne (c'est-à-dire que le nom de la colonne est implicite), tandis que la syntaxe table_constraint commence par FORIEGN KEY(column_name) REFERENCES ... et suit les définitions de colonne

Donc vous pourriez avoir soit :-

Syntaxe de Column_constraint

  • Dans le cadre d'une définition de colonne

  • category INTEGER NOT NULL REFERENCES categories (id)

ex.

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)

ou

Syntaxe Table_constraint

  • après que la colonne ait été définie, mais toujours dans la définition de la colonne, c'est-à-dire toujours à l'intérieur des crochets.

  • FOREIGN KEY (category) REFERENCES categories (id)

par exemple

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

Vous pouvez trouver column-constraint et table-constraint d'utilisation.

date peut être un nom de colonne. Cependant, je suggérerais qu'il est sage de ne pas utiliser de mot-clé SQLite, tel que date, comme nom de colonne.