Mysql
 sql >> база данни >  >> RDS >> Mysql

SQLite в Android:очакват се външни ключове и

Проблемът ви е, че сте объркали 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 ... и следва дефинициите на колоните

Така че можете да имате едно от двете :-

Синтаксис на ограничение на колона

  • Като част от дефиниция на колона

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

или

Синтаксис на ограничение на таблица

  • след като колоните са били дефинирани, но все още в дефиницията на колоната, т.е. все още в скобите.

  • 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 ключова дума, като дата, като име на колона.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Копиране/дублиране на база данни без използване на mysqldump

  2. съхраняване на парола сигурно за api, без да я криптира

  3. Предоставяне на MySQL разрешения за таблица и колона

  4. ГРЕШКА 1356 (HY000):Преглед на „mysql.user“ препраща към невалидни таблици или колони, или функция(и) или дефинитор/извикване на изглед нямат права за използването им

  5. Как да търсите в поле за дата за низ с помощта на API за критерии за JPA