无法在此SQLite语句中找到语法错​​误

时间:2016-12-14 08:54:58

标签: android sql sqlite command-line

我正在编写Android应用程序并需要一个数据库。我将有三张桌子,但现在只设法制作一张。我在控制台中进行调试,然后在我的Javacode中实现它们。以下陈述是成功的:

sqlite3 progressapp.db

CREATE TABLE Z_Type(_Z_T_ID INTEGER PRIMARY KEY NOT NULL, 
Description TEXT NOT NULL, Unit TEXT NOT NULL);

但是现在我想在我的另一个表中引用T_Type的PK:

CREATE TABLE goals (_Z_id INTEGER PRIMARY KEY NOT NULL, Title TEXT NOT NULL,
Type INTEGER NOT NULL, FOREIGN KEY(Type) REFERENCES Z_Type(_Z_T_ID),
Timeframe TEXT, Goaldate INTEGER);

Android中Type INTEGER NOT NULL, FOREIGN KEY(Type) REFERENCES Z_Type(_Z_T_ID)是否是有效的SQLite语句?它说"错误:接近" Timeframe":语法错误"但由于我缺乏SQL体验,我根本无法找到它。

有没有更好的方法来引用FK?

3 个答案:

答案 0 :(得分:3)

试试这个:

CREATE TABLE goals (_Z_id INTEGER PRIMARY KEY NOT NULL, Title TEXT NOT NULL, Type INTEGER NOT NULL,Timeframe TEXT, Goaldate INTEGER, FOREIGN KEY(Type) REFERENCES Z_Type(_Z_T_ID));

我认为订单很重要。 有关进一步的文档,您可以访问sqlite.org/foreignkeys.html

答案 1 :(得分:0)

您可以将引用定义为列定义的一部分

CREATE TABLE goals (_Z_id INTEGER PRIMARY KEY NOT NULL, Title TEXT NOT NULL,
Type INTEGER NOT NULL REFERENCES Z_Type(_Z_T_ID),
Timeframe TEXT, Goaldate INTEGER);

答案 2 :(得分:0)

sqlite CREATE TABLE语句中,列定义首先出现,表格约束仅在此之后出现。

FOREIGN KEY(Type) REFERENCES Z_Type(_Z_T_ID)是一个表约束,应该在最后。