gpt4 book ai didi

Android 数据库 SQLite 自动增量不递增并且违反了主要约束

转载 作者:搜寻专家 更新时间:2023-10-30 23:11:09 24 4
gpt4 key购买 nike

我正在使用此命令创建一个表:

create table if not exists Event ( _id long INTEGER AUTO INCREMENT,repeatEvery long ,repeating int ,startTime long ,title text ,primary key (_id) );

还尝试了不带 _ 前缀的 id,然后我使用

获取所有行
database.query("Event",null , null, null, null, null, null);

然后我查看打印 ID 列的结果:

if (c.moveToFirst()) {
do {
System.out.println(c.getLong(c.getColumnIndexOrThrow("_id")));

} while (c.moveToNext());
}

所有的结果都是零!有想法吗?

最佳答案

默认情况下,SQLITE 会为您添加一个 INTEGER AUTOINCREMENT。搜索 ROWID。复制此功能的列的创建将仅创建为 ROWID 的别名。

我做了更多的挖掘,发现了一些问题。首先,SQLITE 是垃圾。

这是您需要使用的正确 SQL 语句。

CREATE TABLE Event (_id INTEGER PRIMARY KEY AUTOINCREMENT,repeatEvery long ,repeating int ,startTime long ,title text)

我在您的代码示例中发布了一个,它的 _id 列的类型为“INTEGER AUTO INCREMENT”。 SQLITE 解析器非常慷慨并接受它作为数据类型。它不知道如何处理它,只是将其视为一个 blob,并且没有任何约束起作用。因此,即使您的 DDL 不正确,SQLITE 也足够好,可以最好地猜测出什么问题并且不会费心让您知道。 :[

如果您打印应用事件表的架构,您应该会看到 INTEGER AUTO INCREMENT 问题。

另一个需要注意的问题,

如果您自己编写插入语句,则需要以这两种方式之一编写。

insert into Event (repeatEvery, repeating, startTime, title) values (1,2,3, "title");

insert into Event values (NULL, 1,2,3, "title");

SQLITE Helper 类应该为您处理这个。

关于Android 数据库 SQLite 自动增量不递增并且违反了主要约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20081845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com