Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQLite w Androidzie:oczekiwano kluczy obcych i

Twój problem polega na tym, że pomyliłeś column_constraint składnia z table_constraint składnia (tj. zakodowana druga tam, gdzie powinna być użyta pierwsza ).

Możesz rozwiązać problem, używając

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

Jak wyjaśniono poniżej, podobnie jak alternatywna składnia.

Oznacza to, że składnia ograniczenia kolumny zaczyna się od REFERENCES .... i jest częścią definicji kolumny (tzn. nazwa kolumny jest niejawna), podczas gdy składnia table_constraint zaczyna się od FORIEGN KEY(column_name) REFERENCES ... i podąża za definicjami kolumn

Możesz więc mieć:-

Składnia kolumny_ograniczenia

  • Jako część definicji kolumny

  • category INTEGER NOT NULL REFERENCES categories (id)

np.

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)

lub

Składnia Table_constraint

  • po zdefiniowaniu kolumn, ale nadal w definicji kolumny, tj. nadal w nawiasach.

  • FOREIGN KEY (category) REFERENCES categories (id)

np.

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

Możesz znaleźć column-constraint i ograniczenie tabeli użytkowania.

data może być nazwą kolumny. Sugeruję jednak, aby nie używać żadnego słowa kluczowego SQLite, takiego jak data, jako nazwy kolumny.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysqli_stmt::bind_param():Liczba elementów w ciągu definicji typu nie odpowiada liczbie zmiennych wiązania

  2. Jeden do wielu SQL SELECT w jednym wierszu

  3. Nieznana kolumna na liście pól

  4. Usuwanie zduplikowanych wierszy z tabeli

  5. COUNT(*) zwraca wiele wierszy zamiast jednego