Возвращает ли «вставка» в SQLite SQLITE_OK или SQLITE_DONE?

Что означает «вставить»? в SQLite вернуть в случае успеха?

Я всегда считал, что это должен быть SQLITE_DONE, но недавно в своих журналах я обнаружил следующую строку:

<code>sqlite3_step error: 'not an error'
</code>

И вот код, который регистрирует упомянутую строку:

<code>prepareStatement(addTranslationStmt2, "INSERT INTO translations(lang1_wordid, lang2_wordid) VALUES(?, ?)");
if (!addTranslationStmt2) return -2;

sqlite3_bind_int(addTranslationStmt2, 1, word_id);
sqlite3_bind_int(addTranslationStmt2, 2, translation_id);

if(sqlite3_step(addTranslationStmt2) != SQLITE_DONE)
{
    NSLog(@"sqlite3_step error: '%s'", sqlite3_errmsg(database));
    sqlite3_reset(addTranslationStmt2);
    return -1;
}

sqlite3_reset(addTranslationStmt2);
</code>

Мне интересно, почему это работает в большинстве случаев. Должен ли я изменить SQLITE_DONE в своем коде на SQLITE_OK?

Благодарю.

 Macarse27 июн. 2009 г., 17:34
 S.Lott27 июн. 2009 г., 17:34
Когда ты напечатал код ошибки, что ты видел?

Ответы на вопрос(3)

Решение Вопроса

http: //www.sqlite.org/c3ref/step.htm

Вы также можете распечатать код ошибки, чтобы выяснить, в чем проблема.

о хороших:

http: //sqlite.phxsoftware.com/forums/p/76/6659.asp

Theправочник кодов результатов @SQLite перечисляет SQLITE_OK как указывающий на успешный результат. Это также первый код ошибки, имеющий код ошибки 0, что делает его каноническим результатом (т. Е. Результатом, который я ожидаю при успешной операции),.

Вам следует добавить в код точку останова или оператор печати, чтобы выяснить, действительно ли он возвращает ноль, и проверить свои данные, чтобы убедиться, что вы получаете ожидаемый результат. Если все это подтвердится, я бы изменил ваше условие, чтобы проверить SQLITE_OK.

Подробности поведенияsqlite3_step() интерфейс зависит от того, был ли оператор подготовлен с использованием более нового интерфейса "v2"sqlite3_prepare_v2() а такжеsqlite3_prepare16_v2() или старый устаревший интерфейсsqlite3_prepare() а такжеsqlite3_prepare16().

В устаревшем интерфейсе возвращаемое значение будет равноSQLITE_BUSY, SQLITE_DONE, SQLITE_ROW, SQLITE_ERROR, илиSQLITE_MISUSE. С интерфейсом "v2" также могут быть возвращены любые другие коды результатов или расширенные коды результатов.

меня.

Ваш ответ на вопрос