2014-02-27 53 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,”;“**有一个额外的”,“应该被删除。 –