【问题标题】:android.database.sqlite.SQLiteException: near "code":android.database.sqlite.SQLiteException:靠近“代码”:
【发布时间】:2015-08-21 21:07:47
【问题描述】:

我正在尝试在TABLENAME1 键中创建复合主键,我想在两个不同的表中使用,即TABLENAME5TABLENAME6 这可能吗?我很烦SQLiteException 请帮帮我,我对 android 的东西很陌生。这是代码..

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)

【问题讨论】:

  • 需要在创建表声明的最后定义多个主键

标签: android database sqlite


【解决方案1】:

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

【讨论】:

    【解决方案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。

    【讨论】:

    • 我现在做了它说:android.database.sqlite.SQLiteException: unknown column "att" in foreign key definition (code 1): ,同时编译:CREATE TABLE 出勤(当然 TEXT,attdate LONG,外键(att) REFERENCES Campus(att) ON DELETE CASCADE)
    • att or attdate?,我认为你应该检查列名
    • CREATE TABLE 出勤率(当然 TEXT,attdate LONG,FOREIGN KEY(attdate) REFERENCES Campus(att) ON DELETE CASCADE)我认为应该在那里
    • "attdate" 是 TABLENAME6 中的不同列,而 "att" 是(在 TABLENAME1 中)我试图与 "course" 一起制作复合 PK 并在 TABLENAME6 中使用 "att" 列作为外键
    • 是的,但是 TABLENAME6 字段是 att,并且您想使用 TABLENAME1 列 attdate 进行约束,您的列名应该与您在表中定义的一样。在这里查看一些示例alvinalexander.com/android/sqlite-foreign-keys-example
    猜你喜欢
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2020-11-29
    相关资源
    最近更新 更多