2016-12-14 94 views
2

我正在编写一个Android应用程序,并且需要一个数据库。我将有三张桌子,但现在只能做出一张桌子。我在控制台中进行调试并在稍后的Java代码中执行它们。下面的语句是succesfull:在这个SQLite语句中找不到语法错误

sqlite3 progressapp.db 

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

但现在我想REFFERENCE 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); 

Type INTEGER NOT NULL, FOREIGN KEY(Type) REFERENCES Z_Type(_Z_T_ID)在Android的一个有效SQLite的声明?它说“错误:接近”时间范围“:语法错误”但我根本无法找到它,因为缺乏SQL经验我猜。

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

回答

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

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

sqlite CREATE TABLE声明,列定义是第一位的,只有经过表约束那。

FOREIGN KEY(Type) REFERENCES Z_Type(_Z_T_ID)是应该在最后进行的表约束。