SQlite - Android - Foreign key syntax SQlite - Android - Foreign key syntax android android

SQlite - Android - Foreign key syntax


You have to define your TASK_CAT column first and then set foreign key on it.

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

More information you can find on sqlite foreign keys doc.


Since I cannot comment, adding this note in addition to @jethro answer.

I found out that you also need to do the FOREIGN KEY line as the last part of create the table statement, otherwise you will get a syntax error when installing your app. What I mean is, you cannot do something like this:

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

Where I put the TASK_DATE_TIME after the foreign key line.


As you can see in the error description your table contains the columns (_id, tast_title, notes, reminder_date_time) and you are trying to add a foreign key from a column "taskCat" but it does not exist in your table!