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

Small. Fast. Reliable.
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);

Это открывает обработчик для BLOB в строке iRow, колонке zColumn, таблицы zTable БД zDb, другими словами, тот же самый BLOB, который был бы выбран:

SELECT zColumn FROM zDb.zTable WHERE rowid = iRow;

zDb не является именем файла, который содержит базу данных, а скорее символьное имя базы данных. Для приложенных баз данных это имя, которое появляется после ключевого слова AS в запросе ATTACH. Для главного файла базы данных имя базы данных "main". Для таблиц TEMP имя базы данных "temp".

Если параметр флагов отличен от нуля, то BLOB открыт для чтения и записи. Если параметр флагов ноль, BLOB открыт только для чтения.

При успехе возвращен SQLITE_OK и новый обработчик BLOB записан в *ppBlob. Иначе возвращен код ошибки и, если код ошибки не SQLITE_MISUSE, *ppBlob установлен в NULL. Это означает, что, если API правильно используется, всегда безопасно вызвать sqlite3_blob_close() на *ppBlob после этой функции.

Эта функция терпит неудачу с SQLITE_ERROR, если что-либо следующее верно:

  • БД zDb не существует,
  • Таблица zTable не существует в базе данных zDb,
  • Таблица zTable это таблица WITHOUT ROWID,
  • Столбец zColumn не существует,
  • Строки iRow в таблице нет,
  • Указанная колонка строки iRow содержит значение, которое не является TEXT или BLOB,
  • Столбец zColumn часть индекса, ограничения PRIMARY KEY или UNIQUE, а blob открывается для доступа для чтения-записи,
  • Ограничения внешнего ключа позволены, колонка zColumn часть определения дочернего ключа и blob открывается для доступа для чтения-записи.

Если это не возвращает 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().