RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

Small. Fast. Reliable.
Choose any three.

SQLite C Interface

Оцените SQL-оператор

int sqlite3_step(sqlite3_stmt*);

После того, как подготовленный запрос был подготовлен, используя любой вызов из sqlite3_prepare_v2(), sqlite3_prepare_v3(), sqlite3_prepare16_v2(), sqlite3_prepare16_v3() или один из старых интерфейсов sqlite3_prepare() или sqlite3_prepare16(), эта функция должна быть вызвана один или несколько раз, чтобы оценить запрос.

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

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

SQLITE_BUSY означает, что ядро базы данных не смогло получить блокировку базы данных. Если запрос COMMIT или происходит за пределами явной транзакции, то можно его повторить. Если запрос не COMMIT и происходит в рамках явной транзакции, вы должны отменить транзакцию перед продолжением.

SQLITE_DONE означает, что запрос закончил выполняться успешно. sqlite3_step() нельзя вызвать снова на этой виртуальной машине без предварительного sqlite3_reset(), чтобы перезагрузить виртуальную машину назад к ее начальному состоянию.

Если выполняемый SQL-оператор вернет какие-либо данные, то SQLITE_ROW возвращен каждый раз, когда новая строка данных готова к обработке. К значениям можно получить доступ, используя функции доступа колонки. sqlite3_step() вызывают снова, чтобы полусить следующую строку данных.

SQLITE_ERROR означает, что произошла ошибка периода выполнения (такая как ограничительное нарушение). sqlite3_step() нельзя вызвать снова на VM. Больше информации может быть найдено, вызывая sqlite3_errmsg(). С устаревшим интерфейсом более определенный код ошибки (например, SQLITE_INTERRUPT, SQLITE_SCHEMA, SQLITE_CORRUPT и т.д.) может быть получен, вызывая sqlite3_reset() на подготовленном запросе. В интерфейсе "v2" более определенный код ошибки возвращен непосредственно sqlite3_step().

SQLITE_MISUSE означает, что это вызвали неуместно. Возможно, это вызвали на подготовленном запросе, который был уже финализирован, или на том, который ранее возвратил SQLITE_ERROR или SQLITE_DONE. Или могло иметь место, что то же самое соединение с базой данных используется двумя или больше потоками одновременно.

Для всех версий SQLite до и включая 3.6.23.1 требовался запрос sqlite3_reset() после того, как sqlite3_step() вернул что-то кроме SQLITE_ROW перед любым последующим sqlite3_step(). Отказ перезагрузить подготовленный запрос, используя sqlite3_reset() привел бы к возвращению SQLITE_MISUSE из sqlite3_step(). Но после version 3.6.23.1 (2010-03-26 sqlite3_step() начал вызывать sqlite3_reset() автоматически при этом обстоятельстве вместо того, чтобы возвратить SQLITE_MISUSE. Это не считают разрывом совместимости, потому что любое применение, которое когда-либо получает ошибку SQLITE_MISUSE, сломано по определению. Выбор времени компиляции SQLITE_OMIT_AUTORESET может использоваться, чтобы восстановить устаревшее поведение.

В устаревшем интерфейсе sqlite3_step() API всегда возвращает универсальный код ошибки SQLITE_ERROR после любой ошибки, кроме SQLITE_BUSY и SQLITE_MISUSE. Необходимо вызвать sqlite3_reset() или sqlite3_finalize(), чтобы найти один из определенных кодов ошибки, которые лучше описывают ошибку. Мы признаем, что это глупый дизайн. Проблема была решена с интерфейсом "v2". Если вы готовите все свои SQL-операторы, используя sqlite3_prepare_v3(), sqlite3_prepare_v2(), sqlite3_prepare16_v2() или sqlite3_prepare16_v3() вместо sqlite3_prepare() и sqlite3_prepare16(), то более определенные коды ошибок возвращены непосредственно sqlite3_step(). Использование интерфейсов "vX" рекомендуется.