![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Это открывает обработчик для BLOB в строке
iRow, колонке zColumn, таблицы zTable БД zDb,
другими словами, тот же самый BLOB, который был бы выбран: zDb не является именем файла, который содержит базу данных, а скорее
символьное имя базы данных. Для приложенных баз данных это имя, которое
появляется после ключевого слова AS в запросе
ATTACH. Для главного файла базы данных имя базы данных "main".
Для таблиц TEMP имя базы данных "temp". Если параметр флагов отличен от нуля, то BLOB открыт для чтения и записи.
Если параметр флагов ноль, BLOB открыт только для чтения. При успехе возвращен SQLITE_OK и новый
обработчик BLOB записан в *ppBlob.
Иначе возвращен код ошибки
и, если код ошибки не SQLITE_MISUSE, *ppBlob установлен в NULL.
Это означает, что, если API правильно используется, всегда безопасно вызвать
sqlite3_blob_close()
на *ppBlob после этой функции. Эта функция терпит неудачу с SQLITE_ERROR,
если что-либо следующее верно:
Если это не возвращает SQLITE_MISUSE, эта функция устанавливает код ошибки
соединения с базой данных и сообщение, доступное через
sqlite3_errcode() и
sqlite3_errmsg(). BLOB, на который ссылается sqlite3_blob_open(), может быть прочитан,
используя интерфейс sqlite3_blob_read()
и изменен при помощи sqlite3_blob_write().
Обработчик BLOB может быть перемещен в другую
строку той же самой таблицы, используя интерфейс
sqlite3_blob_reopen().
Однако колонка, таблица или база данных не могут быть изменены после того,
как открыт обработчик BLOB. Если строка, на которую указывает обработчик BLOB, изменяется
UPDATE, DELETE,
или ON CONFLICT, обработчик помечается как
"expired". Это верно, если какая-либо колонка строки
изменяется, даже колонка кроме той, где находится обработчик.
Вызов sqlite3_blob_read() и
sqlite3_blob_write() для
expired BLOB терпят неудачу с кодом возврата
SQLITE_ABORT.
Изменения, написанные в BLOB до истечения BLOB, не отменены
истечением BLOB. Такие изменения в конечном счете передадут, если
транзакция продолжится до завершения. Используйте интерфейс sqlite3_blob_bytes()
, чтобы определить размер открытого blob. Размер blob не может быть
изменен этим интерфейсом. Используйте SQL-команду
UPDATE, чтобы изменить размер blob. Интерфейсы sqlite3_bind_zeroblob() и
sqlite3_result_zeroblob()
и встроенная SQL-функция zeroblob
могут использоваться, чтобы создать заполненный нулями blob, чтобы прочитать
или написать с использованием интерфейса incremental-blob. Чтобы избежать утечки ресурсов, каждый открытый
обработчик BLOB должен в конечном счете быть
закрыт вызовом sqlite3_blob_close(). См. также: sqlite3_blob_close(),
sqlite3_blob_reopen(),
sqlite3_blob_read(),
sqlite3_blob_bytes(),
sqlite3_blob_write().
Choose any three.
SQLite C Interface
Открыть BLOB для возрастающего I/O
int sqlite3_blob_open(sqlite3*, const char *zDb, const char *zTable,
const char *zColumn, sqlite3_int64 iRow, int flags,
sqlite3_blob **ppBlob);
SELECT zColumn FROM zDb.zTable WHERE rowid = iRow;