Базовый синтаксис SQLITE - PullRequest
0 голосов
/ 14 июня 2010

Кажется, я неправильно понимаю основной синтаксис, почему этот пример работает:

sqlite3_prepare_v2(db, "insert into test values('boo','boo',0);", strlen(querystring)+1 , &stmt, NULL);

if ((rc = sqlite3_step(stmt)) != SQLITE_DONE)
  fprintf(stderr, "Error: sqlite3_step() %d. Error Message %s;\n",rc,sqlite3_errmsg(db));

Но когда я пытаюсь выполнить этот запрос: "вставить в тестовые (strtest) значения ('boo');"

Я получаю сообщение об ошибке: Ошибка: sqlite3_step () 19. Ошибка ограничения сообщения об ошибке;

Что мне не хватает?

Проверка таблицы: «Создать тест таблицы (blobtest BLOB (4) NOT NULL, strtest VARCHAR NOT NULL, inttest INTEGER NOT NULL); "

Спасибо, Doori Bar

1 Ответ

4 голосов
/ 14 июня 2010

Все три столбца объявлены как NOT NULL, и у них нет значения по умолчанию.

Итак, ваш запрос:

insert into test(strtest) values('boo');

Только присваивает blobtest значение, исключая strtest и inttest, которые не могут быть нулевыми.

Это можно исправить, добавив еще два значения или изменив схему таблицы по умолчанию на что-либо, например ::

create table test (
    blobtest BLOB(4) NOT NULL,
    strtest VARCHAR NOT NULL DEFAULT '',
    inttest INTEGER NOT NULL DEFAULT 0
);

(или вы можете убрать NOT NULL, если вы хотите, чтобы они были NULL -able)

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