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(自动递增)