Small. Fast. Reliable.
Choose any three.

SQLite C接口

为增量I / O打开BLOB

int sqlite3_blob_open(
  sqlite3 *,
  const char * zDb,
  const char * zTable,
  const char * zColumn,
  sqlite3_int64 iRow,
  整数标志,
  sqlite3_blob ** ppBlob
);

该接口为位于数据库zDb中的iRow行,zColumn列,zTable表中的BLOB打开句柄;换句话说,将通过以下方式选择相同的BLOB:

从zDb.zTable中选择zColumn WHERE rowid = iRow ;

参数zDb不是包含数据库的文件名,而是数据库的符号名称。对于附加的数据库,这是在ATTACH语句中的AS关键字之后显示的名称。对于主数据库文件,数据库名称为“ main”。对于TEMP表,数据库名称为“ temp”。

如果flags参数不为零,则打开BLOB以进行读写访问。如果flags参数为零,则将BLOB打开以进行只读访问。

成功后,将返回SQLITE_OK并将新的BLOB句柄存储在* ppBlob中。否则,将返回错误代码,除非错误代码为SQLITE_MISUSE,否则* ppBlob设置为NULL。这意味着,只要不滥用该API, 在返回此函数后,始终可以在* ppBlob上调用sqlite3_blob_close()始终是安全的。

如果满足以下任一条件,则此函数将失败,并显示SQLITE_ERROR:

除非返回SQLITE_MISUSE,否则此函数将设置可通过sqlite3_errcode()sqlite3_errmsg()及相关函数访问的 数据库连接错误代码和消息 。

通过sqlite3_blob_open引用的BLOB()可以使用被读 sqlite3_blob_read()接口,并通过使用改性 sqlite3_blob_write() 。可以使用sqlite3_blob_reopen() 接口将BLOB句柄移到同一表的另一行。但是,打开BLOB句柄 后,无法更改BLOB句柄的列,表或数据库。

如果BLOB句柄指向的行被 UPDATEDELETEON CONFLICT副作用修改,则BLOB句柄将标记为“已过期”。如果更改了该行的任何列,甚至是打开BLOB句柄的列之外的列,也是如此。为到期的BLOB句柄调用sqlite3_blob_read()sqlite3_blob_write()失败,返回码为SQLITE_ABORT。BLOB到期之前不会回滚在BLOB到期之前写入BLOB的更改。如果交易继续完成,则此类更改最终将提交。

使用sqlite3_blob_bytes()接口确定打开的Blob的大小。此接口可能无法更改Blob的大小。使用UPDATE SQL命令更改Blob的大小。

所述sqlite3_bind_zeroblob()sqlite3_result_zeroblob()接口和内置在zeroblob SQL函数可以被用来创建一个零填充的斑点使用增量-Blob接口来读取或写入。

为了避免资源泄漏,最终应通过调用sqlite3_blob_close()释放每个打开的BLOB句柄

另请参见:sqlite3_blob_close()sqlite3_blob_reopen()sqlite3_blob_read()sqlite3_blob_bytes()sqlite3_blob_write()

另请参见 对象常量函数的列表