![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Чтобы выполнить SQL-оператор, это должно сначала быть собрано в программу
байт-код, используя одну из этих функций.
Или другими словами эти хранимые процедуры это конструкторы для объекта
подготовленного запроса. Предпочтительная процедура, чтобы использовать, это
sqlite3_prepare_v2().
Интерфейс sqlite3_prepare() устарел и лучше
его не трогать. sqlite3_prepare_v3()
имеет дополнительный параметр "prepFlags",
который используется для особых целей. Использование интерфейсов UTF-8 предпочтено, поскольку SQLite в настоящее
время делает весь парсинг, используя UTF-8. Интерфейсы UTF-16 обеспечиваются
как удобство. UTF-16 соединяет работу, преобразовывая входной текст в UTF-8,
затем вызывая соответствующий интерфейс UTF-8. Первым аргументом, "db", является
соединение с базой данных, полученное от предшествующего успешного вызова
sqlite3_open(),
sqlite3_open_v2() или
sqlite3_open16().
Соединение с базой данных не должно быть закрыто. Вторым аргументом, "zSql", является запрос для сборки,
закодированный как UTF-8 или UTF-16. sqlite3_prepare(), sqlite3_prepare_v2()
и sqlite3_prepare_v3() используют UTF-8, а sqlite3_prepare16(),
sqlite3_prepare16_v2() и sqlite3_prepare16_v3() используют UTF-16. Если nByte отрицателен, zSql прочитан до первого нулевого терминатора.
Если nByte положительный, то это число байтов, прочитанных из zSql.
Если nByte = 0, то никакой подготовленный запрос не произведен.
Если вызывающий знает, что предоставленная строка nul-закончена, то есть
небольшое исполнительное преимущество для прохождения nByte параметра,
который является числом байтов во входной строке
включая nul-терминатор. Если pzTail не NULL, *pzTail указывает на первый байт после
конца первого SQL-оператора в zSql. Эта хранимая процедура только собирает
первый запрос в zSql, таким образом, *pzTail
указывает налево к тому, что остается несобранным. *ppStmt указывает налево к собранному
подготовленному запросу,
который может быть выполнен, используя
sqlite3_step().
Если есть ошибка, *ppStmt установлен в NULL. Если входной текст не содержит
SQL (если вход пустая строка или комментарий), тогда *ppStmt = NULL.
Процедура запроса ответственна за удаление собранного SQL-оператора,
используя sqlite3_finalize()
после того, как это закончило работу с ним. ppStmt может не быть NULL. При успехе sqlite3_prepare() вернет
SQLITE_OK, иначе
код ошибки. sqlite3_prepare_v2(), sqlite3_prepare_v3(), sqlite3_prepare16_v2() и
sqlite3_prepare16_v3() рекомендуются для всех новых программ.
Более старые интерфейсы (sqlite3_prepare() и sqlite3_prepare16())
сохраняются для обратной совместимости, но их использование не рекомендуется.
В интерфейсах "vX" подготовленный запрос, который возвращен
(объект sqlite3_stmt)
содержит копию оригинального кода на SQL. Это заставляет
sqlite3_step()
вести себя по-другому тремя путями: sqlite3_prepare_v3() отличается от sqlite3_prepare_v2()
только наличием дополнительного параметра prepFlags, который является
маленьким множеством, состоящим из ноля или большего количества флагов
SQLITE_PREPARE_*.
sqlite3_prepare_v2() работает аналогично
sqlite3_prepare_v3() с нулевым параметром prepFlags.
Choose any three.
SQLite C Interface
Компилирование SQL-оператора
int sqlite3_prepare(
sqlite3 *db, /* Database handle */
const char *zSql, /* SQL statement, UTF-8 encoded */
int nByte, /* Maximum length of zSql in bytes. */
sqlite3_stmt **ppStmt, /* OUT: Statement handle */
const char **pzTail /* OUT: Pointer to unused portion of zSql */
);
int sqlite3_prepare_v2(
sqlite3 *db, /* Database handle */
const char *zSql, /* SQL statement, UTF-8 encoded */
int nByte, /* Maximum length of zSql in bytes. */
sqlite3_stmt **ppStmt, /* OUT: Statement handle */
const char **pzTail /* OUT: Pointer to unused portion of zSql */
);
int sqlite3_prepare_v3(
sqlite3 *db, /* Database handle */
const char *zSql, /* SQL statement, UTF-8 encoded */
int nByte, /* Maximum length of zSql in bytes. */
unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_ flags */
sqlite3_stmt **ppStmt, /* OUT: Statement handle */
const char **pzTail /* OUT: Pointer to unused portion of zSql */
);
int sqlite3_prepare16(
sqlite3 *db, /* Database handle */
const void *zSql, /* SQL statement, UTF-16 encoded */
int nByte, /* Maximum length of zSql in bytes. */
sqlite3_stmt **ppStmt, /* OUT: Statement handle */
const void **pzTail /* OUT: Pointer to unused portion of zSql */
);
int sqlite3_prepare16_v2(
sqlite3 *db, /* Database handle */
const void *zSql, /* SQL statement, UTF-16 encoded */
int nByte, /* Maximum length of zSql in bytes. */
sqlite3_stmt **ppStmt, /* OUT: Statement handle */
const void **pzTail /* OUT: Pointer to unused portion of zSql */
);
int sqlite3_prepare16_v3(
sqlite3 *db, /* Database handle */
const void *zSql, /* SQL statement, UTF-16 encoded */
int nByte, /* Maximum length of zSql in bytes. */
unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_ flags */
sqlite3_stmt **ppStmt, /* OUT: Statement handle */
const void **pzTail /* OUT: Pointer to unused portion of zSql */
);