51 votes

SQlite - Android - clé Étrangère de la syntaxe

J'ai essayé d'obtenir les clés étrangères de travail au sein de mon Android de base de données SQLite. J'ai essayé la syntaxe suivante, mais il me donne une force de fermeture:

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

Les idées de ce que je fais de mal? si vous avez besoin de voir l'autre structure de la table, puis je peux, c'est juste une structure très simple pour la seconde avec un ID et un nom.

Edit:

Voici le message d'erreur:

03-13 13:42:35.389: ERREUR/AndroidRuntime(312): Causé par: android.la base de données.sqlite.SQLiteException: inconnu de la colonne "taskCat" à l'étranger définition de clé: créer une table des rappels (_id integer primary key autoincrement, task_title texte pas null, notes de texte n'est pas null, reminder_date_time text not null, La CLÉ ÉTRANGÈRE (taskCat) RÉFÉRENCES catégorie (_id));

107voto

jethro Points 4930

Vous devez définir votre TASK_CAT colonne abord, puis définissez la clé étrangère sur elle.

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

Plus d'informations vous pouvez trouver sur sqlite clés étrangères doc.

10voto

nommer Points 331

Depuis je ne peux pas commenter, l'ajout de cette note en outre @jethro réponse.

J'ai découvert que vous devez aussi faire de la CLÉ ÉTRANGÈRE de la ligne, comme la dernière partie de créer la table, sinon vous aurez une erreur de syntaxe lors de l'installation de votre application. Ce que je veux dire, vous ne pouvez pas faire quelque chose comme ceci:

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

Où j'ai mis le TASK_DATE_TIME après la clé étrangère de la ligne.

2voto

aweis Points 1849

Comme vous pouvez le voir dans la description d'erreur de votre table contient des colonnes (_id, tast_title, notes, reminder_date_time) et que vous tentez d'ajouter une clé étrangère d'une colonne "taskCat" mais il n'existe pas dans ta table!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X