【发布时间】:2011-10-16 20:10:11
【问题描述】:
我有一个带有行(行)的文本文件。每行是数据库表中的一条记录。我阅读了这个文件并填写了数据库。
表格创建命令:
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;
奇怪的是,有些记录插入没有错误,我找不到好记录和坏记录的区别。
如果需要,我可以提供更多信息。
【问题讨论】:
-
报错“column number is not unique”表示该数字值存在于数据库中(是主键),所以不能用这个数字再插入一行
-
但在我的情况下,主键是文本(不是数字)。我们为什么要讨论一个数字?
-
@MiguelPrz 提到“数字”,因为那是具有非唯一值的列。混淆来自名为“数字”的表列,该列实际上是 TEXT 类型。
-
是的,这是我的命名错误。 @MiguelPrz,你是正确的行,数据库中已经存在相同的“数字”值。