我目前有一个名为User的表,它有一个id列,创建为
'INTEGER PRIMARY KEY'
假设我创建了两个用户,因此表的id为1和2
如果删除第二个用户并创建第三个id为2,我需要将其设为3
因此,Android似乎正在选择下一个可用ID,如何将其更改为更像序列号?
此致
答案 0 :(得分:92)
将其设为INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL
。这是the docs所说的:
如果列的类型为INTEGER PRIMARY KEY AUTOINCREMENT,则...选择ROWID 对于新行至少比最大的ROWID大一个 曾经存在于同一张桌子里。
AUTOINCREMENT关键字实现的行为是巧妙的 与默认行为不同。使用AUTOINCREMENT,行 自动选择的ROWID保证具有ROWID 以前从未在同一个数据库中使用同一个表。而且 自动生成的ROWID保证是单调的 增加。
答案 1 :(得分:11)
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
答案 2 :(得分:0)
如果说的是 ANDROID ,是的,上面的答案是正确的,除了id列的命名。
describe('My Test', function () {
const dateStub;
before('', function () {
dateStub = sinon.stub(Date, 'getTime').returns(143434325325);
});
it('should return date with hours ', () => {
const result = getLastHour();
expect(dateStub).to.be.called;
});
});
在Android中,它应该命名为“ rowid”。 使用Cursor,您需要像这样实例化它:
UserWarning: "link/" looks like a URL. Beautiful Soup is not an HTTP client.
You should probably use an HTTP client like requests to get the
document behind the URL, and feed that document to Beautiful Soup.
' that document to Beautiful Soup.' % decoded_markup
否则它对我没有用。我不知道为什么。
答案 3 :(得分:0)
在写数据库(即执行)时,请记住使用android,
做 插入TABLE_NAME(param1name,param2name)值(param1,param2)
,无需为自动增量添加占位符。添加记录时,它将自行添加。如果不声明要放入的参数,则将得到错误x预期变量的数量,而您只给出x-1,这是因为您不应该为自动增量列提供任何占位符值