“CREATE TABLE”附近的SQLite语法错误

时间:2013-12-11 23:48:15

标签: android sqlite syntax-error

这是我的代码:

    String CREATE_DATABASE = "CREATE TABLE " + TABLE_NAME + "("  + 
            KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
            "title TEXT, "+
            "author TEXT, "+
            "state TEXT);";

    db.execSQL(CREATE_DATABASE);

LogCat说:12-11 23:43:50.553:E / AndroidRuntime(3706):android.database.sqlite.SQLiteException:near“CREATE TABLE”:语法错误(代码1):,编译时:CREATE TABLE PapersTable(_id INTEGER PRIMARY KEY AUTOINCREMENT,标题文本,作者TEXT,州TEXT);

3 个答案:

答案 0 :(得分:2)

CREATE TABLE语法可以正确发布。

我怀疑CREATETABLE之间存在不间断的空格(ASCII 0xA0)。将其替换为常规空间(ASCII 0x20)。这可以解释您发布的语法错误:解析器将CREATE TABLE视为单个未知令牌而不是两个单独的已知令牌CREATETABLE

绝对错误的是,您将db.close()上的SQLiteDatabase db作为参数传递给您的函数。您应该只关闭自己打开的数据库并以这种方式关闭它会导致异常,尽管是不同的。

答案 1 :(得分:-1)

在SQLite中,声明为整数主键的列将自动递增,因此请尝试删除:

String CREATE_DATABASE = "CREATE TABLE " + TABLE_NAME + "("  + 
        KEY_ID + " INTEGER PRIMARY KEY, " + 
        "title TEXT, "+
        "author TEXT, "+
        "state TEXT);";

请参阅此answer以供参考。

答案 2 :(得分:-1)

在onCreate方法中尝试此代码。

  1. 删除KEY_ID的AUTOINCREMENT,因为它已被声明为主键。
  2. 删除“;”你刚刚放在字符串中的最后一个括号之后,即字符串CREATE_DATABASE中的第二个分号。
  3. 从oncreate()
  4. 删除db.close()

    要替换的代码: 字符串CREATE_DATABASE =“CREATE TABLE”+ TABLE_NAME +“(”+ KEY_ID +“INTEGER PRIMARY KEY,”+ KEY_TITLE +“TEXT,”+ KEY_AUTHOR +“TEXT,”+ KEY_STATE +“TEXT)”; db.execSQL(CREATE_DATABASE);