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

SQLite INSERT command return error "column number is not unique"

本文关键字:number is not unique column SQLite 命令 返回 错误 INSERT      更新时间:2023-10-16

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

表创建命令:

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; 

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

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

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

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

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

这应该可以防止插入失败,因为在'number'列中有重复的值。

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

查看SQLite CREATE TABLE文档了解更多细节