SQlite - Android - Синтаксис внешнего ключа - PullRequest
50 голосов
/ 13 марта 2011

Я пытался заставить работать внешние ключи в моей базе данных 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: ОШИБКА / AndroidRuntime (312): вызвано: android.database.sqlite.SQLiteException: неизвестный столбец «taskCat» в определении внешнего ключа:создавать напоминания таблицы (автоинкремент первичного ключа целого числа _id, текст task_title не равен NULL, текст примечания не равен NULL, текст напоминания_date_time не равен NULL, категория FOREIGN KEY (taskCat) REFERENCES (_id));

Ответы [ 3 ]

104 голосов
/ 13 марта 2011

Вы должны сначала определить столбец 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+"));";

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

10 голосов
/ 15 марта 2013

Поскольку я не могу комментировать, добавив эту заметку в дополнение к ответу @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 после строки внешнего ключа.

2 голосов
/ 13 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...