Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 外键上的Sqlite错误_Android_Sqlite - Fatal编程技术网

Android 外键上的Sqlite错误

Android 外键上的Sqlite错误,android,sqlite,Android,Sqlite,我试图通过外键创建3个表之间的关系。因为出现了一个补偿错误,所以出现了问题 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(

我试图通过外键创建3个表之间的关系。因为出现了一个补偿错误,所以出现了问题

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, );"         
        );

所有3条Create Table语句都错误:

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 );"          
    );          
    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 );"         
    );
[编辑]

我更新了我的答案以反映您的最新变化:

Create Table语句中有两条仍然错误(末尾有多余的逗号):

它们应该是:

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

关键字\u STUDYNAME+“文本”+ 按键+文本+

,”

文本丢失后

和要求

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) )"

我们取得了成功。请尝试,只需将静态字符串更改为变量。

您可以发布LogCat错误,但这些缺少/错误的逗号并没有导致问题中的错误。同样的语法错误仍在发生。另外,应删除键_HOURDATA+“TEXT NOT NULL,);“has a EXTRA”。