SQlite – Android – 外键语法

我一直在尝试让我的Android SQLite数据库中的外键工作。 我已经尝试过下面的语法,但它给了我一个closures的力量:

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

任何想法我可能做错了什么? 如果您需要查看其他表结构,那么我可以,它只是一个非常简单的结构,第二个具有ID和名称。

编辑:

这是错误:

03-13 13:42:35.389:错误/ AndroidRuntime(312):导致:android.database.sqlite.SQLiteException:未知的列“taskCat”在外键定义:创build表提醒(_id整数主键自动增量,task_title文本不null,注释文本不为空,提醒date时间文本不为空,FOREIGN KEY(taskCat)REFERENCES category(_id));

您必须先定义您的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+"));"; 

更多的信息,你可以find在SQLite外键文档 。

由于我不能发表评论,除了@jethro的回答join这个注释。

我发现你还需要做FOREIGN KEY行作为创buildtable语句的最后一部分,否则在安装你的应用程序时会出现语法错误。 我的意思是,你不能这样做:

 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放在外键行后面。

正如你在错误描述中看到的那样,表中包含了列(_id,tast_title,notes,reminder_date_time),而且你试图从一个列“taskCat”添加一个外键,但是它不存在于你的表中!