2016-12-14 63 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)是應該在最後進行的表約束。