SQLite INSERT命令返回错误“列号不唯一”

时间:2011-10-16 20:10:11

标签: 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);

插入查询:

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; 

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

这可以防止因“数字”列中的重复值而导致插入失败。

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

查看SQLite CREATE TABLE documentation了解详情。

相关问题