【发布时间】:2011-12-08 17:10:43
【问题描述】:
我目前有一个名为 User 的表,它有一个 id 列,它被创建为
'整数主键'
假设我创建了两个用户,所以表的 id 为 1 和 2
如果我删除第二个用户并创建第三个 id 为 2 的用户,我需要将其设为 3
看来 Android 正在选择下一个可用的 id,如何将其更改为更像序列号?
问候
【问题讨论】:
-
但是你需要主键,这很好用。为什么你需要这个?
我目前有一个名为 User 的表,它有一个 id 列,它被创建为
'整数主键'
假设我创建了两个用户,所以表的 id 为 1 和 2
如果我删除第二个用户并创建第三个 id 为 2 的用户,我需要将其设为 3
看来 Android 正在选择下一个可用的 id,如何将其更改为更像序列号?
问候
【问题讨论】:
设为INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL。这是the docs 所说的:
如果列的类型为 INTEGER PRIMARY KEY AUTOINCREMENT 则...选择的 ROWID 因为新行至少比最大的 ROWID 大一 以前曾经存在于同一张桌子上。
AUTOINCREMENT 关键字实现的行为很巧妙 与默认行为不同。使用 AUTOINCREMENT,行 自动选择的 ROWID 保证具有 以前从未被同一个数据库中的同一张表使用过。和 保证自动生成的 ROWID 是单调的 增加。
【讨论】:
AUTOINCREMENT 没有PRIMARY KEY。因为我分配的主键是另一列,所以我使用_ID INTEGER AUTOINCREMENT NOT NULL 这会出错。请帮助我兄弟。
SQLite AUTOINCREMENT 是用于自动增加表中字段值的关键字。我们可以在创建具有特定列名的表时使用AUTOINCREMENT关键字自动递增字段值以自动递增它。
关键字AUTOINCREMENT 只能与INTEGER 字段一起使用。
语法:
AUTOINCREMENT关键字的基本用法如下:
CREATE TABLE table_name(
column1 INTEGER AUTOINCREMENT,
column2 datatype,
column3 datatype,
.....
columnN datatype,
);
例如见下图:
考虑如下创建COMPANY 表:
sqlite> CREATE TABLE TB_COMPANY_INFO(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
现在,将以下记录插入到表TB_COMPANY_INFO:
INSERT INTO TB_COMPANY_INFO (NAME,AGE,ADDRESS,SALARY)
VALUES ( 'MANOJ KUMAR', 40, 'Meerut,UP,INDIA', 200000.00 );
现在选择记录
SELECT *FROM TB_COMPANY_INFO
ID NAME AGE ADDRESS SALARY
1 Manoj Kumar 40 Meerut,UP,INDIA 200000.00
【讨论】:
AUTOINCREMENT 放错了位置。谢谢你的例子!
如果代表ANDROID,是的,以上答案都是正确的,除了id列的命名。
database.execSQL("CREATE TABLE IF NOT EXISTS "
+ TableName
+ " ( rowid INTEGER PRIMARY KEY AUTOINCREMENT, Raqam VARCHAR, ChandBor INT(3));");
看起来在 Android 中它应该被命名为“rowid”。 使用 Cursor 你需要像这样实例化它:
Cursor cursorLcl = database.rawQuery("SELECT *," + TableName + ".rowid AS rowid" + " FROM " +
TableName, null);
否则它对我不起作用。我不知道为什么会这样。
【讨论】:
在写入数据库(即执行)时,请记住 android,
做 INSERT INTO TABLE_NAME (param1name, param2name) VALUES (param1,param2)
并且无需为自动增量添加占位符。添加记录时会自行添加。如果您不声明要输入的参数,您将得到错误 x 预期的变量数量并且您只给出 x-1,这是因为您不应该为自动增量列提供任何位置值
【讨论】: