我正在尝试在数据库中创建一个表,其 ID 本身是自动增量的,但是每当我尝试将
AUTOINCREMENT
关键字添加到我的查询中时,它都会告诉我:
仅在整数主键上允许自动增量
这是我的询问:
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE IF NOT EXISTS " + TABLE_TASKS + " ( "
+ KEY_ID + "INTEGER PRIMARY KEY AUTOINCREMENT, "
+ KEY_NOTETITLE + " TEXT, " + KEY_NOTECONTENT + " Text, "
+ KEY_STATUS + " INTEGER)";
db.execSQL(sql);
}
我也尝试过写
AUTO_INCREMENT
,但后来出现语法错误。
我发现这是问题的根源,因为每当我尝试删除
AUTOINCREMENT
时,它都工作正常。
那么...您认为问题出在哪里?
您需要在
KEY_ID
和 INTEGER
之间添加一个空格
所以改变
+ KEY_ID + "INTEGER PRIMARY KEY AUTOINCREMENT, "
到
+ KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
使用整数主键创建表无需显式提及 AUTOINCRMENT
例如
CREATE TABLE t1(
a INTEGER PRIMARY KEY,
C TEXT
);
Insert into t1(C) values("Hello");
像这样创建表,在 INTEGER 之前放置一些空格....
"CREATE TABLE "+TABLE_NAME+" ("+KEY_ID+" INTEGER PRIMARY KEY AUTOINCREMENT)";
我在下面遇到了同样的错误:
解析错误:仅在整数主键上允许自动增量
因为我使用了
TEXT
类型和PRIMARY KEY AUTOINCREMENT
,如下图:
CREATE TABLE my_table (
id TEXT PRIMARY KEY AUTOINCREMENT
# ↑↑↑↑
);
所以,我使用了
INTEGER
类型和PRIMARY KEY AUTOINCREMENT
,如下所示,然后错误就解决了:
CREATE TABLE my_table (
id INTEGER PRIMARY KEY AUTOINCREMENT
# ↑↑↑↑↑↑↑
);
医生说如下:
任何尝试在 NOT ROWID 表或
列以外的列上使用AUTOINCREMENT
都会导致错误。INTEGER PRIMARY KEY
另外,如果使用
AUTOINCREMENT
而不使用INTEGER PRIMARY KEY
,如下图:
CREATE TABLE my_table (
id INTEGER AUTOINCREMENT
# ↑↑↑↑↑↑↑↑↑↑↑↑↑
);
然后,您会收到以下错误:
解析错误:“自动增量”附近:语法错误