2015-08-21 74 views
0

我想在TABLENAME1中使用复合主键我想在两个不同的表中使用,即TABLENAME5TABLENAME6这是可能的吗?我得到这个恼人的SQLiteException请帮助我,我很新的Android的东西。这里是代码..android.database.sqlite.SQLiteException:在“代码”附近:

public void onCreate(SQLiteDatabase db) { 
     db.execSQL("CREATE TABLE " + TABLE_NAME1 + " (teacher TEXT,course TEXT,att TEXT,PRIMARY KEY(course, att), code TEXT NOT NULL, bunk INTEGER, attend INTEGER, room TEXT)"); 
     db.execSQL("CREATE TABLE " + TABLE_NAME2 + " (id INTEGER PRIMARY KEY, title TEXT, notes TEXT)"); 
     db.execSQL("CREATE TABLE " + TABLE_NAME5 + " (course TEXT,bunkdate LONG,FOREIGN KEY(course) REFERENCES " + TABLE_NAME1 + "(course) ON DELETE CASCADE)"); 
     db.execSQL("CREATE TABLE " + TABLE_NAME6 + " (course TEXT,attdate LONG,FOREIGN KEY(att) REFERENCES " + TABLE_NAME1 + "(att) ON DELETE CASCADE)"); 
     db.execSQL("CREATE TABLE " + TABLE_NAME3 + " (id INTEGER PRIMARY KEY AUTOINCREMENT,year INTEGER, month INTEGER, day INTEGER, hour INTEGER, minute INTEGER, title TEXT, type TEXT, status INTEGER, snooze INTEGER, shakemode INTEGER, mathsolver INTEGER, sun INTEGER,mon INTEGER,tue INTEGER, wed INTEGER,thu INTEGER, fri INTEGER,sat INTEGER)"); 
     } 

这里是logcat的:

08-22 01:51:44.419: E/SQLiteLog(1528): (1) near "code": syntax error 
08-22 01:51:44.429: E/AndroidRuntime(1528): FATAL EXCEPTION: main 
08-22 01:51:44.429: E/AndroidRuntime(1528): Process: com.smart.scheduler, PID: 1528 
08-22 01:51:44.429: E/AndroidRuntime(1528): android.database.sqlite.SQLiteException: near "code": syntax error (code 1): , while compiling: CREATE TABLE campus (teacher TEXT,course TEXT,att TEXT,PRIMARY KEY(course, att), code TEXT NOT NULL, bunk INTEGER, attend INTEGER, room TEXT) 
+1

你需要在创建表声明的末尾定义多个主键 –

回答

2

尝试改变

 db.execSQL("CREATE TABLE " + TABLE_NAME1 + " (teacher TEXT,course TEXT,att TEXT,PRIMARY KEY(course, att), code TEXT NOT NULL, bunk INTEGER, attend INTEGER, room TEXT)"); 

这样:

db.execSQL("CREATE TABLE " + TABLE_NAME1 + " (teacher TEXT,course TEXT,att TEXT, code TEXT NOT NULL, bunk INTEGER, attend INTEGER, room TEXT,PRIMARY KEY(course, att))"); 

,让我知道你的logcat如果不起作用。

+0

我现在做了它说:android.database.sqlite.SQLiteException:在外键定义(代码1)中的未知列“att”:,编译时:CREATE TABLE考勤(课程TEXT,attdate LONG,FOREIGN KEY(att)参考校园(att)ON DELETE CASCADE) –

+0

att or attdate ?,我认为你应该检查列名 –

+0

CREATE TABLE考勤(课程TEXT,attdate LONG, (attdate)参考校园(att)ON DELETE CASCADE)我认为应该在那 –

3

根据documentation,表约束应在列定义之后,即所有列之后的PRIMARY KEY

+0

是的,这就对了! –

相关问题