gpt4 book ai didi

c++ - SQLite INSERT 命令返回错误 "column number is not unique"

转载 作者:行者123 更新时间:2023-11-30 04:32:14 24 4
gpt4 key购买 nike

我有一个包含行(行)的文本文件。每行是数据库表中的一条记录。我读取了这个文件并填充了数据库。

创建表命令:

CREATE TABLE gosts(number TEXT PRIMARY KEY, userNumber TEXT, status TEXT, date TEXT, title TEXT, engTitle TEXT, description TEXT, mainCategory INTEGER, category INTEGER, subCategory INTEGER);

插入查询:

INSERT INTO gosts VALUES ("30331.8-95", "ÃÎÑÒ 30331.8-95", "Äåéñòâóþùèé", "01.07.1996", "Ýëåêòðîóñòàíîâêè çäàíèé. ×àñòü 4. Òðåáîâàíèÿ ïî îáåñïå÷åíèþ áåçîïàñíîñòè. Îáùèå òðåáîâàíèÿ ïî ïðèìåíåíèþ ìåð çàùèòû äëÿ îáåñïå÷åíèÿ áåçîïàñíîñòè. Òðåáîâàíèÿ ïî ïðèìåíåíèþ ìåð çàùèòû îò ïîðàæåíèÿ ýëåêòðè÷åñêèì òîêîì", "Electrical installations of buildings. Part 4. Protection for safety. Applisation of protective measues for safety. Measures of protection against electric shock", "Íàñòîÿùèé ñòàíäàðò óñòàíàâëèâàåò îáùèå òðåáîâàíèÿ ïî ïðèìåíåíèþ ìåð çàùèòû äëÿ îáåñïå÷åíèÿ áåçîïàñíîñòè è òðåáîâàíèÿ ïî ïðèìåíåíèþ ìåð çàùèòû îò ïîðàæåíèÿ ýëåêòðè÷åñêèì òîêîì ïðè ýêñïëóàòàöèè ýëåêòðîóñòàíîâîê çäàíèé", 37, 333, 628);

请忽略编码问题。源文件有 cp1251 编码,但插入示例是从控制台获取的。我尝试使用 utf-8 但遇到了同样的问题。

SQLite 使用上面的代码:

if(sqlite3_prepare_v2(database, query, -1, &statement, 0) == SQLITE_OK) {
...
}

函数调用不返回 SQLITE_OK。我通过以下方式获取错误消息:

string error = sqlite3_errmsg(database);
if(error != "not an error") cout << query << " " << error << endl;

奇怪的是,有些记录插入没有错误,我找不到好记录和坏记录之间的区别。

如果需要,我可以提供更多信息。

最佳答案

我敢打赌,好行和坏行之间的区别在于与“数字”列关联的值是否已经在表中。

这是表设计通常不为 PRIMARY KEY 使用 TEXT 值列的原因之一。

如果可以重新创建您的表,我会创建一个 ID 字段作为您表的 PRIMARY KEY。进一步启用 IDENTITY 属性以自动递增您的主键值。

这应该可以防止由于“数字”列中有重复值而导致插入失败。

现在,如果“数字”列中的值必须是唯一的,那么您应该在该列上添加一个UNIQUE约束。
注意:UNIQUE 将产生与您当前收到的错误相同的错误,因为您似乎正在尝试为列“编号”添加具有相同值的多行

查看 SQLite CREATE TABLE documentation了解更多详情。

关于c++ - SQLite INSERT 命令返回错误 "column number is not unique",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7786975/

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