SQlite - Android - Foreign key syntax

AndroidSqliteForeign Keys

Android Problem Overview


I've been trying to get foreign keys working within my Android SQLite database. I have tried the following syntax but it gives me a force close:

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

Any ideas what I might be doing wrong? if you need to see the other table structure then I can, its just a very simple structure for the second with an ID and a name.

Edit:

Here is the error:

> 03-13 13:42:35.389: > ERROR/AndroidRuntime(312): Caused by: > android.database.sqlite.SQLiteException: > unknown column "taskCat" in foreign > key definition: create table reminders > (_id integer primary key > autoincrement, task_title text not > null, notes text not null, > reminder_date_time text not null, > FOREIGN KEY (taskCat) REFERENCES > category (_id));

Android Solutions


Solution 1 - Android

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.

Solution 2 - Android

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.

Solution 3 - Android

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!

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser319940View Question on Stackoverflow
Solution 1 - AndroidjethroView Answer on Stackoverflow
Solution 2 - AndroidnommerView Answer on Stackoverflow
Solution 3 - AndroidaweisView Answer on Stackoverflow