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

Posted

技术标签:

【中文标题】AUTOINCREMENT 只允许在 INTEGER PRIMARY KEY 上使用 - android【英文标题】:AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY - android 【发布时间】:2014-10-23 02:59:59 【问题描述】:

我正在尝试在我的数据库中创建一个表,其 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);

我也尝试过编写 AUTO_INCREMENT,但后来出现语法错误。

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

那么……你认为问题出在哪里?

【问题讨论】:

相关:如果你想在 SQLite 中创建一个自动递增的非主键列(谷歌把我带到这里),请参阅this answer。 【参考方案1】:

您需要在KEY_ID AND INTEGER 之间添加一个空格

所以改变

+ KEY_ID + "INTEGER PRIMARY KEY AUTOINCREMENT, "

+ KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "

【讨论】:

【参考方案2】:

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

例如

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

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

【讨论】:

如果没有自动增量,sqlite 可能会重复使用已删除的 id。 @loshadvtapkah PRIMARY KEY 将使用大于最后一行 id 的未使用整数:来源:sqlite.org/autoinc.html @RameshKumar 是的,但这并不意味着它不会重用 ID。如果我删除了几条具有最高 id 的记录,它们将被重用。在大多数情况下,这根本不是问题,但即使应用程序跟踪外键检查,最好不要重复使用键,以避免一个错误由于另一个错误。【参考方案3】:

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

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

【讨论】:

以上是关于AUTOINCREMENT 只允许在 INTEGER PRIMARY KEY 上使用 - android的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 上为 SQLite 使用 AUTOINCREMENT 的开销是啥?

[QT][SQL]sql学习记录5_sqlite Autoincrement(自动递增)

如何在不检查 MySQL 中的 AUTOINCREMENT 的情况下增加主键

AUTOINCREMENT 自动增量

AutoIncrement无法设置的问题

AUTOINCREMENT 不适用于 OleDbCommand