Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SQLite no Android:chaves estrangeiras e esperadas


Seu problema é que você misturou column_constraint sintaxe com table_constraint sintaxe (ou seja, codificou o último onde o primeiro deve ser usado ).

Você pode corrigir o problema usando

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 é explicado abaixo, assim como a sintaxe alternativa.

Essa é a sintaxe de restrição de coluna que começa com REFERENCES .... e faz parte da definição da coluna (ou seja, o nome da coluna é implícito), enquanto a sintaxe table_constraint começa com FORIEGN KEY(column_name) REFERENCES ... e segue as definições de coluna

Então você poderia ter:-

Sintaxe de restrição_coluna

  • Como parte de uma definição de coluna

  • category INTEGER NOT NULL REFERENCES categories (id)

por exemplo.
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

Sintaxe de restrição_tabela

  • após as colunas terem sido definidas, mas ainda dentro da definição da coluna, ou seja, ainda dentro dos colchetes.

  • FOREIGN KEY (category) REFERENCES categories (id)

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

Você pode encontrar column-constraint e restrição de tabela de uso.

data pode ser um nome de coluna. No entanto, sugiro que não use nenhuma palavra-chave SQLite, como data, como nome de coluna.