这是我的代码:
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);
答案 0 :(得分:2)
CREATE TABLE
语法可以正确发布。
我怀疑CREATE
和TABLE
之间存在不间断的空格(ASCII 0xA0)。将其替换为常规空间(ASCII 0x20)。这可以解释您发布的语法错误:解析器将CREATE TABLE
视为单个未知令牌而不是两个单独的已知令牌CREATE
和TABLE
。
绝对错误的是,您将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方法中尝试此代码。
要替换的代码: 字符串CREATE_DATABASE =“CREATE TABLE”+ TABLE_NAME +“(”+ KEY_ID +“INTEGER PRIMARY KEY,”+ KEY_TITLE +“TEXT,”+ KEY_AUTHOR +“TEXT,”+ KEY_STATE +“TEXT)”; db.execSQL(CREATE_DATABASE);