仅在整数主键上允许自动增量 - SQLite 和 Android

问题描述 投票:0回答:4

我正在尝试在数据库中创建一个表,其 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
时,它都工作正常。

那么...您认为问题出在哪里?

android database sqlite auto-increment parse-error
4个回答
41
投票

您需要在

KEY_ID
INTEGER

之间添加一个空格

所以改变

+ KEY_ID + "INTEGER PRIMARY KEY AUTOINCREMENT, "

+ KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "

8
投票

使用整数主键创建表无需显式提及 AUTOINCRMENT

例如

CREATE TABLE t1(
  a INTEGER PRIMARY KEY,
  C TEXT
); 

Insert into t1(C) values("Hello");

2
投票

像这样创建表,在 INTEGER 之前放置一些空格....

"CREATE TABLE "+TABLE_NAME+" ("+KEY_ID+" INTEGER PRIMARY KEY AUTOINCREMENT)";

0
投票

我在下面遇到了同样的错误:

解析错误:仅在整数主键上允许自动增量

因为我使用了

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
           # ↑↑↑↑↑↑↑↑↑↑↑↑↑
);

然后,您会收到以下错误:

解析错误:“自动增量”附近:语法错误

© www.soinside.com 2019 - 2024. All rights reserved.