“course_gpa_id”附近的SQLite异常

时间:2014-04-07 20:24:13

标签: android sql sqlite foreign-keys

我在编写DatabaseHandler时遇到了一些异常,我已经纠正了大部分错误,但最近出现了这个错误,当时我刚刚完成了debbuging。

这是我的SQL语句。所有其他3个表都没有错误,并且正确创建。这是最后一个create table语句。

private static final String CREATE_COURSE_TABLE = "CREATE TABLE "
        + TABLE_COURSE + " (" + KEY_ID
        + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_COURSEPROF_ID
        + " INTEGER, " + FOREIGN_PROF + ", " + KEY_COURSEGPA_ID
        + " INTEGER, " + FOREIGN_GPA + ", " + KEY_COURSETERM_ID
        + " INTEGER, " + FOREIGN_TERM + ", " + KEY_NAME + " TEXT, "
        + KEY_COURSE_NUMBER + " TEXT, " + KEY_COURSE_LOCATION + " TEXT";

在崩溃之前也会遇到其他错误。

  

无法打开AchieveGPA_DB进行写入(将尝试只读)

编辑:

感谢您的回复,添加了缺少的括号。虽然错误仍然存​​在,但这是日志:

  

04-07 17:34:20.213:E / SQLiteOpenHelper(9100):android.database.sqlite.SQLiteException:near“course_gpa_id”:语法错误:,编译时:CREATE TABLE courseTable(_id INTEGER PRIMARY KEY AUTOINCREMENT,course_prof_id INTEGER,FOREIGN KEY(course_prof_id)REFERENCES教授表(_id),course_gpa_id INTEGER,FOREIGN KEY(course_gpa_id)参考gpaTable(_id),course_term_id INTEGER,FOREIGN KEY(course_term_id)REFERENCES termTable(_id),name TEXT,number TEXT,location TEXT)

外国关键词语

// Foreign key statements.
private static final String FOREIGN_PROF = "FOREIGN KEY("+KEY_COURSEPROF_ID+") REFERENCES "+TABLE_PROFESSOR+"("+KEY_ID+")";
private static final String FOREIGN_GPA = "FOREIGN KEY("+KEY_COURSEGPA_ID+") REFERENCES "+TABLE_GPA+"("+KEY_ID+")";
private static final String FOREIGN_TERM = "FOREIGN KEY("+KEY_COURSETERM_ID+") REFERENCES "+TABLE_TERM+"("+KEY_ID+")";

1 个答案:

答案 0 :(得分:2)

您正在混合列规范和表约束(外键声明)。 SQL语法要求列规范是第一个,表约束是最后一个。

要修复它,请在所有列规范之后移动FOREIGN KEY声明。