2014-02-27 81 views
-1

我想通過外鍵創建3個表之間的關係。有些東西是錯誤的,因爲彈出complitation錯誤。外鍵的sqlite錯誤

SQLiteException: near "code_element" which is equal to KEY_ELEMENTCODE in DATABASE_TABLEELEMENTS 

的代碼如下:

public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     db.execSQL(" CREATE TABLE " + DATABASE_TABLESTUDY + " (" + 
       KEY_ROWSTUDYID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
       KEY_STUDYCODE + " TEXT UNIQUE NOT NULL, " + 
       KEY_STUDYNAME + " TEXT " + 
       KEY_STUDANALYST + " TEXT " + 
       KEY_STUDYPHOTO + " BLOB);"   
     );   
     db.execSQL(" CREATE TABLE " + DATABASE_TABLEELEMENTS + " (" + 
       KEY_ROWELEMENTID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
       KEY_STUDYID + " TEXT NOT NULL, FOREIGN KEY ("+KEY_STUDYID+") REFERENCES "+DATABASE_TABLESTUDY+" ("+KEY_ROWSTUDYID+"), " + 
       KEY_ELEMENTCODE + " TEXT UNIQUE NOT NULL, " + 
       KEY_ELEMENTNAME + " TEXT " + 
       KEY_ELEMENTPHOTO + " BLOB);"    
     );   
     db.execSQL(" CREATE TABLE " + DATABASE_TABLEDATA + " (" + 
       KEY_ROWDATATID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
       KEY_ELEMENTID + " TEXT NOT NULL, FOREIGN KEY ("+KEY_ELEMENTID+") REFERENCES " + DATABASE_TABLEELEMENTS + " ("+KEY_ROWELEMENTID+"), " + 
       KEY_DATEDATA + " TEXT NOT NULL, " + 
       KEY_TIMEDATA + " TEXT NOT NULL, " + 
       KEY_ACTIVITYDATA + " TEXT NOT NULL, " + 
       KEY_HOURDATA + " TEXT NOT NULL,);"   
     ); 
+0

你可以發佈LogCat錯誤 – MDMalik

回答

0

你的所有3周創建表的語句是錯誤的:

public void onCreate(SQLiteDatabase db) { 
    // TODO Auto-generated method stub 
    db.execSQL(" CREATE TABLE " + DATABASE_TABLESTUDY + " (" + 
      KEY_ROWSTUDYID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      KEY_STUDYCODE + " TEXT UNIQUE NOT NULL, " + 
      KEY_STUDYNAME + " TEXT " + // Missing comma! 
      KEY_STUDANALYST + " TEXT " + // Missing comma! 
      KEY_STUDYPHOTO + " BLOB);" 
    ); 
    db.execSQL(" CREATE TABLE " + DATABASE_TABLEELEMENTS + " (" + 
      KEY_ROWELEMENTID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      KEY_STUDYID + " TEXT NOT NULL, FOREIGN KEY ("+KEY_STUDYID+") REFERENCES "+DATABASE_TABLESTUDY+" ("+KEY_ROWSTUDYID+"), " + 
      KEY_ELEMENTCODE + " TEXT UNIQUE NOT NULL, " + 
      KEY_ELEMENTNAME + " TEXT " + // Missing comma! 
      KEY_ELEMENTPHOTO + " BLOB);" 
    ); 
    db.execSQL(" CREATE TABLE " + DATABASE_TABLEDATA + " (" + 
      KEY_ROWDATATID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      KEY_ELEMENTID + " TEXT NOT NULL, FOREIGN KEY ("+KEY_ELEMENTID+") REFERENCES " + DATABASE_TABLEELEMENTS + " ("+KEY_ROWELEMENTID+"), " + 
      KEY_DATEDATA + " TEXT NOT NULL, " + 
      KEY_TIMEDATA + " TEXT NOT NULL, " + 
      KEY_ACTIVITYDATA + " TEXT NOT NULL, " + 
      KEY_HOURDATA + " TEXT NOT NULL,);" // Extra comma! 
    ); 

他們應該是:

public void onCreate(SQLiteDatabase db) { 
    // TODO Auto-generated method stub 
    db.execSQL(" CREATE TABLE " + DATABASE_TABLESTUDY + " (" + 
      KEY_ROWSTUDYID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      KEY_STUDYCODE + " TEXT UNIQUE NOT NULL, " + 
      KEY_STUDYNAME + " TEXT, " + 
      KEY_STUDANALYST + " TEXT, " + 
      KEY_STUDYPHOTO + " BLOB);" 
    ); 
    db.execSQL(" CREATE TABLE " + DATABASE_TABLEELEMENTS + " (" + 
      KEY_ROWELEMENTID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      KEY_STUDYID + " TEXT NOT NULL, FOREIGN KEY ("+KEY_STUDYID+") REFERENCES "+DATABASE_TABLESTUDY+" ("+KEY_ROWSTUDYID+"), " + 
      KEY_ELEMENTCODE + " TEXT UNIQUE NOT NULL, " + 
      KEY_ELEMENTNAME + " TEXT, " + 
      KEY_ELEMENTPHOTO + " BLOB);" 
    ); 
    db.execSQL(" CREATE TABLE " + DATABASE_TABLEDATA + " (" + 
      KEY_ROWDATATID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      KEY_ELEMENTID + " TEXT NOT NULL, FOREIGN KEY ("+KEY_ELEMENTID+") REFERENCES " + DATABASE_TABLEELEMENTS + " ("+KEY_ROWELEMENTID+"), " + 
      KEY_DATEDATA + " TEXT NOT NULL, " + 
      KEY_TIMEDATA + " TEXT NOT NULL, " + 
      KEY_ACTIVITYDATA + " TEXT NOT NULL, " + 
      KEY_HOURDATA + " TEXT NOT NULL);" 
    ); 

[編輯]

我更新了我的答案,以反映最新的更改:

你創建表的語句中有兩個是仍然是錯的(末尾額外逗號):

db.execSQL(" CREATE TABLE " + DATABASE_TABLEELEMENTS + " (" + 
      KEY_ROWELEMENTID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      KEY_STUDYID + " TEXT NOT NULL, FOREIGN KEY ("+KEY_STUDYID+") REFERENCES "+DATABASE_TABLESTUDY+" ("+KEY_ROWSTUDYID+"), " + 
      KEY_ELEMENTCODE + " TEXT UNIQUE NOT NULL, " + 
      KEY_ELEMENTNAME + " TEXT, " + 
      KEY_ELEMENTPHOTO + " BLOB,);"  // Extra comma! 
    );   
    db.execSQL(" CREATE TABLE " + DATABASE_TABLEDATA + " (" + 
      KEY_ROWDATATID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      KEY_ELEMENTID + " TEXT NOT NULL, FOREIGN KEY ("+KEY_ELEMENTID+") REFERENCES " + DATABASE_TABLEELEMENTS + " ("+KEY_ROWELEMENTID+"), " + 
      KEY_DATEDATA + " TEXT NOT NULL, " + 
      KEY_TIMEDATA + " TEXT NOT NULL, " + 
      KEY_ACTIVITYDATA + " TEXT NOT NULL, " + 
      KEY_HOURDATA + " TEXT NOT NULL,);" // Extra comma! 
    ); 

他們應該是:

db.execSQL(" CREATE TABLE " + DATABASE_TABLEELEMENTS + " (" + 
      KEY_ROWELEMENTID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      KEY_STUDYID + " TEXT NOT NULL, FOREIGN KEY ("+KEY_STUDYID+") REFERENCES "+DATABASE_TABLESTUDY+" ("+KEY_ROWSTUDYID+"), " + 
      KEY_ELEMENTCODE + " TEXT UNIQUE NOT NULL, " + 
      KEY_ELEMENTNAME + " TEXT, " + 
      KEY_ELEMENTPHOTO + " BLOB);"   
    );   
    db.execSQL(" CREATE TABLE " + DATABASE_TABLEDATA + " (" + 
      KEY_ROWDATATID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      KEY_ELEMENTID + " TEXT NOT NULL, FOREIGN KEY ("+KEY_ELEMENTID+") REFERENCES " + DATABASE_TABLEELEMENTS + " ("+KEY_ROWELEMENTID+"), " + 
      KEY_DATEDATA + " TEXT NOT NULL, " + 
      KEY_TIMEDATA + " TEXT NOT NULL, " + 
      KEY_ACTIVITYDATA + " TEXT NOT NULL, " + 
      KEY_HOURDATA + " TEXT NOT NULL);"   
    ); 
+1

好抓SIR! – MDMalik

+0

謝謝,先生! ;) –

+0

但是這些缺失/錯誤的逗號不會導致問題中的錯誤。同樣的語法錯誤仍然發生。 –

0

KEY_STUDYNAME + 「TEXT」 + KEY_STUDANALYST + 「TEXT」 +文字錯過

KEY_ELEMENTNAME + " TEXT " + 

''

後。

而且要求

db.execSQL("CREATE TABLE DATABASE_TABLESTUDY (
       KEY_ROWSTUDYID INTEGER PRIMARY KEY AUTOINCREMENT, 
       KEY_STUDYCODE TEXT UNIQUE NOT NULL, 
       KEY_STUDYNAME TEXT, 
       KEY_STUDANALYST TEXT, 
       KEY_STUDYPHOTO BLOB);" 
db.execSQL("CREATE TABLE DATABASE_TABLEELEMENTS (
        KEY_ROWELEMENTID INTEGER PRIMARY KEY AUTOINCREMENT, 
        KEY_STUDYID TEXT NOT NULL, 
        KEY_ELEMENTCODE TEXT UNIQUE NOT NULL, 
        KEY_ELEMENTNAME TEXT , 
        KEY_ELEMENTPHOTO BLOB, FOREIGN KEY (KEY_STUDYID) REFERENCES DATABASE_TABLESTUDY (KEY_ROWSTUDYID));" 
db.execSQL("CREATE TABLE DATABASE_TABLEDATA (
        KEY_ROWDATATID INTEGER PRIMARY KEY AUTOINCREMENT, 
        KEY_ELEMENTID TEXT NOT NULL, 
        KEY_DATEDATA TEXT NOT NULL, 
        KEY_TIMEDATA TEXT NOT NULL, 
        KEY_ACTIVITYDATA TEXT NOT NULL, 
        KEY_HOURDATA TEXT NOT NULL, FOREIGN KEY (KEY_ELEMENTID) REFERENCES DATABASE_TABLEELEMENTS (KEY_ROWELEMENTID))" 

是成功的。請嘗試,只是將靜態字符串更改爲您的變量。

+0

也** KEY_HOURDATA +「TEXT NOT NULL,」;「**有一個額外的」,「應該被刪除。 –