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