AUTOINCREMENT只允许在INTEGER PRIMARY KEY - android上使用

Dav*_*sry 13 sqlite android auto-increment

我正在尝试在我的数据库中创建一个具有自动增量ID的表,但每当我尝试将AUTOINCREMENT关键字添加到我的查询时,它告诉我:

AUTOINCREMENT仅允许在INTEGER PRIMARY KEY上使用

这是我的查询:

@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);
}
Run Code Online (Sandbox Code Playgroud)

我也尝试写AUTO_INCREMENT,但后来我遇到了语法错误.

我发现这是问题的根源,因为每当我尝试删除AUTOINCREMENT字时,它都能正常工作.

那么......你认为这是什么问题?

Apo*_*orv 27

您需要在KEY_IDAND 之间添加空格INTEGER

所以改变

+ KEY_ID + "INTEGER PRIMARY KEY AUTOINCREMENT, "
Run Code Online (Sandbox Code Playgroud)

+ KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
Run Code Online (Sandbox Code Playgroud)


小智 5

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

例如

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

Insert into t1(C) values("Hello");
Run Code Online (Sandbox Code Playgroud)

  • @RameshKumar 是的,这并不意味着它不会重用 ID。如果我删除了几个具有顶级 ID 的记录,它们将被重用。在大多数情况下,这根本不是问题,但即使应用程序正在跟踪外键检查,最好不要重用键,以避免由于其他错误导致一个错误。 (2认同)

Uma*_*air 2

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

"CREATE TABLE "+TABLE_NAME+" ("+KEY_ID+" INTEGER PRIMARY KEY AUTOINCREMENT)";
Run Code Online (Sandbox Code Playgroud)