sql >> Base de Datos >  >> RDS >> Mysql

SQLite en Android:se esperan claves foráneas y

Tu problema es que has mezclado column_constraint sintaxis con table_constraint sintaxis (es decir, codificó el último donde se debe usar el primero ).

Puede solucionar el problema utilizando

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

Como se explica a continuación como es la sintaxis alternativa.

Esa es la sintaxis de restricción de columna que comienza con REFERENCES .... y es parte de la definición de la columna (es decir, el nombre de la columna está implícito), mientras que la sintaxis de table_constraint comienza con FORIEGN KEY(column_name) REFERENCES ... y sigue las definiciones de columna

Así que podrías tener :-

Sintaxis de restricción_columna

  • Como parte de una definición de columna

  • category INTEGER NOT NULL REFERENCES categories (id)

por ejemplo

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

Sintaxis de Table_constraint

  • después de que se hayan definido las columnas, pero aún dentro de la definición de la columna, es decir, aún dentro de los corchetes.

  • FOREIGN KEY (category) REFERENCES categories (id)

por ejemplo

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

Puede encontrar column-constraint y table-constraint de uso.

fecha puede ser un nombre de columna. Sin embargo, sugeriría que es prudente no usar ninguna palabra clave de SQLite, como fecha, como nombre de columna.