Ошибка возврата команды SQLite INSERT "номер столбца не уникален" - PullRequest
1 голос
/ 17 октября 2011

У меня есть текстовый файл со строками (строками). Каждая строка представляет собой запись в таблице базы данных. Я читаю этот файл и заполняю базу данных.

Команда создания таблиц:

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 Ответ

2 голосов
/ 17 октября 2011

Могу поспорить, что разница между хорошими и плохими строками заключалась в том, было ли в таблице значение, связанное со столбцом «число», или нет.

Это одна из причин, по которой таблица обычно проектируетсяне используйте TEXT оцененные столбцы для PRIMARY KEY s.

Если возможно воссоздать вашу таблицу, я бы создал поле идентификатора, отвечающее за PRIMARY KEY для вашей таблицы.Далее включите свойство IDENTITY для автоматического увеличения значения первичного ключа.

Это должно предотвратить сбой вставки из-за наличия дублирующихся значений в столбце «число».

Теперь, если значения в столбце «число» должны быть уникальными, необходимо добавить ограничение UNIQUE для этого столбца.
ПРИМЕЧАНИЕ. UNIQUE приведет к той же ошибкевы в настоящее время получаете, как кажется, вы пытаетесь добавить несколько строк с одинаковым значением для столбца 'номер'

Подробнее см. документацию SQLite CREATE TABLE .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...