SQlite - Android - Синтаксис внешнего ключа

48

Я пытаюсь получить внешние ключи, работающие в моей базе данных Android SQLite. Я пробовал следующий синтаксис, но он дает мне силу:

private static final String TASK_TABLE_CREATE = "create table "
            + TASK_TABLE + " (" + TASK_ID
            + " integer primary key autoincrement, " + TASK_TITLE
            + " text not null, " + TASK_NOTES + " text not null, "
    + TASK_DATE_TIME + " text not null, FOREIGN KEY ("+TASK_CAT+") REFERENCES "+CAT_TABLE+" ("+CAT_ID+"));";

Любые идеи, что я могу делать неправильно? если вам нужно увидеть другую структуру таблицы, то я могу, ее просто очень простая структура для второго с идентификатором и именем.

Изменить:

Вот ошибка:

03-13 13: 42: 35.389: ERROR/AndroidRuntime (312): вызвано: android.database.sqlite.SQLiteException: неизвестный столбец "taskCat" в иностранных определение ключа: создать напоминания таблицы (_id целочисленный первичный ключ автоинкремент, текст task_title не null, замечания текст не null, текст reminder_date_time не имеет значения null, FOREIGN KEY (taskCat) ССЫЛКИ категория (_id));

Теги:
foreign-keys

3 ответа

102
Лучший ответ

Сначала вы должны определить свой столбец TASK_CAT, а затем установить на нем внешний ключ.

private static final String TASK_TABLE_CREATE = "create table "
        + TASK_TABLE + " (" 
        + TASK_ID + " integer primary key autoincrement, " 
        + TASK_TITLE + " text not null, " 
        + TASK_NOTES + " text not null, "
        + TASK_DATE_TIME + " text not null,"
        + TASK_CAT + " integer,"
        + " FOREIGN KEY ("+TASK_CAT+") REFERENCES "+CAT_TABLE+"("+CAT_ID+"));";

Более подробную информацию вы можете найти на внешних внешних ключах doc.

  • 5
    Это решение не сработало для меня. Решение, которое я нашел, состояло в том, чтобы определить все это в одной строке, но с немного другим синтаксисом. Я сделал это вместо двух последних строк: TASK_CAT + "INTEGER REFERENCES" + CAT_TABLE + ");";
  • 0
    @ Хоть, ты прав, приятель. Ваше решение сработало и для меня. Спасибо
Показать ещё 1 комментарий
9

Так как я не могу прокомментировать, добавив эту заметку в дополнение к ответу @jethro.

Я выяснил, что вам также нужно сделать строку FOREIGN KEY как последнюю часть создания инструкции таблицы, иначе вы получите синтаксическую ошибку при установке приложения. Я имею в виду, что вы не можете сделать что-то вроде этого:

private static final String TASK_TABLE_CREATE = "create table "
    + TASK_TABLE + " (" + TASK_ID
    + " integer primary key autoincrement, " + TASK_TITLE
    + " text not null, " + TASK_NOTES + " text not null, "
+ TASK_CAT + " integer,"
+ " FOREIGN KEY ("+TASK_CAT+") REFERENCES "+CAT_TABLE+" ("+CAT_ID+"), "
+ TASK_DATE_TIME + " text not null);";

Где я поместил TASK_DATE_TIME после строки внешнего ключа.

1

Как вы можете видеть в описании ошибки, ваша таблица содержит столбцы (_id, tast_title, notes, reminder_date_time), и вы пытаетесь добавить внешний ключ из столбца "taskCat", но он не существует в вашей таблице!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню