我在编写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+")";
答案 0 :(得分:2)
您正在混合列规范和表约束(外键声明)。 SQL语法要求列规范是第一个,表约束是最后一个。
要修复它,请在所有列规范之后移动FOREIGN KEY
声明。