我有一個帶有行(行)的文本文件。每行都是數據庫表中的記錄。我讀這個文件並填充數據庫。SQLite INSERT命令返回錯誤「列號不唯一」
創建表的命令:
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。我gea錯誤消息:
string error = sqlite3_errmsg(database);
if(error != "not an error") cout << query << " " << error << endl;
奇怪的是,一些記錄插入沒有錯誤,我無法找到好記錄和壞記錄之間的差異。
如果需要,我可以提供更多信息。
錯誤「列號不唯一」表示數值存在於數據庫中(是主鍵),所以您不能插入具有此數字的另一行 –
但在我的情況下,主鍵是文本(不是一個號碼)。爲什麼我們討論一個數字? –
@MiguelPrz提到'數字',因爲那是具有非唯一值的列。混淆來自實際上是TEXT類型的名爲'number'的表列。 – Gibron