C++ SQLite插入命令返回错误";“列编号不唯一”;

C++ SQLite插入命令返回错误";“列编号不唯一”;,c++,sql,sqlite,C++,Sql,Sqlite,我有一个包含行(行)的文本文件。每一行都是数据库表中的一条记录。我读了这个文件并填写了数据库 表格创建命令: 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); 插入

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

表格创建命令:

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\u OK。并通过以下方式发送错误消息:

string error = sqlite3_errmsg(database);
if(error != "not an error") cout << query << " " << error << endl; 
string error=sqlite3\u errmsg(数据库);

如果(error!=“nota error”)不能我敢打赌,好行和坏行之间的区别在于与“number”列关联的值是否已经在表中

这是表设计通常不为
主键
s使用
文本
值列的原因之一

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

这将防止由于“数字”列中存在重复值而导致插入失败

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


有关详细信息,请查看。

错误“列编号不唯一”表示数据库中存在编号值(是主键),因此您无法使用此编号插入另一行,但在我的情况下,主键是文本(不是数字)。为什么我们要讨论数字?@MiguelPrz提到“数字”,因为这是具有非唯一值的列。混淆来自名为“number”的表列,它实际上是TEXT类型。是的,这是我命名的错误@MiguelPrz,您是正确的行,数据库中已经显示了相同的“数字”值。感谢您的快速回复。字段“编号”可能是唯一的,是的。在我的例子中,数据库很简单,我不会从其他表中引用“gosts”实体。但我稍后会考虑“id”字段。