SQLite3使用接口写入二进制文件

使用接口的方式写入二进制文件 ,有二种方案。

一、全部文件 一次性写下到数据中 使用sqlite3_bind_blob接口

cpp 复制代码
 
FILE* fp=fopen("user.bmp","rb");
iLen=fread(buffer,1,65535,fp);
fclose(fp);
 
sqlite3_prepare(pDB,"insert into user values ('1001',?);",-1,&stmt,NULL);
sqlite3_bind_blob(stmt,1,buffer,iLen,NULL);
sqlite3_step(stmt);

二、使用blob接口函数,增量写入数据

cpp 复制代码
int sqlite3_blob_open(
  sqlite3*,
  const char *zDb,
  const char *zTable,
  const char *zColumn,
  sqlite3_int64 iRow,
  int flags,
  sqlite3_blob **ppBlob
);

该接口打开位于数据库 zDb 中行 iRow、列 zColumn、表 zTable 中的 BLOB的句柄;换句话说,相同的 BLOB 将由以下人员选择:

SELECT zColumn FROM zDb.zTable WHERE rowid = iRow;

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

将数据增量写入 BLOB

复制代码
int sqlite3_blob_write(sqlite3_blob *, const void *z, int n, int iOffset);

该函数用于将数据从调用者提供的缓冲区写入打开的 BLOB handle 。N 个字节的数据从缓冲区 Z 复制到打开的 BLOB,从偏移量 iOffset 开始。

成功时,sqlite3_blob_write() 返回 SQLITE_OK。否则,将返回 error code 或 extended error code 。除非返回 SQLITE_MISUSE,否则此函数将设置可通过 sqlite3_errcode() 和 sqlite3_errmsg() 及相关函数访问的 database connection 错误代码和消息。

如果作为第一个参数传递的 BLOB handle 未打开进行写入( sqlite3_blob_open() 的 flags 参数为零),则此函数返回 SQLITE_READONLY 。

该函数只能修改BLOB的内容;使用此 API 无法增加 BLOB 的大小。如果偏移 iOffset 距离 BLOB 末尾小于 N 个字节,则返回 SQLITE_ERROR 并且不写入任何数据。BLOB 的大小(以及 N+iOffset 的最大值)可以使用 sqlite3_blob_bytes() 接口确定。如果 N 或 iOffset 小于零,则返回 SQLITE_ERROR 并且不写入任何数据。

尝试写入过期的 BLOB handle 失败,错误代码为 SQLITE_ABORT 。在 BLOB handle 过期之前发生的对 BLOB 的写入不会因句柄过期而回滚,尽管这些更改当然可能已被使 BLOB 句柄过期的语句或其他独立语句覆盖。

此例程仅适用于由先前成功调用 sqlite3_blob_open() 创建且尚未被 sqlite3_blob_close() 关闭的 BLOB handle 。将任何其他指针传递给此例程都会导致未定义的且可能是不良行为。

另请参阅: sqlite3_blob_read() 。

​在这里写个笔记,这几天要用到sqlite相关的函数 。

相关推荐
z_鑫20 小时前
Java线程池原理深度解析
java·开发语言·后端
春生野草20 小时前
启动Nginx
java·微服务·架构
悟空CRM服务20 小时前
开源的力量:如何用开源技术构建高效IT架构?
java·人工智能·架构·开源·开源软件
神仙别闹21 小时前
基于SpringMVC+Spring+MyBatis开发的个人博客网站
java·spring·mybatis
小红的布丁21 小时前
Redis存储引擎剖析:从哈希表到智能数据结构
数据库·redis
华仔啊21 小时前
MyBatis-Plus 不只是简化CRUD!资深架构师总结的15个高阶用法
java·后端·mybatis
饮长安千年月21 小时前
玄机-第八章 内存马分析-java02-shiro
数据库·安全·web安全·网络安全·应急响应
Han.miracle21 小时前
Java EE --JUC
java·线程池·原子类·callable·semaphore·reentrantlcok
那我掉的头发算什么1 天前
【javaEE】多线程——线程安全初阶☆☆☆
java·jvm·安全·java-ee·intellij-idea
yzp-1 天前
Zookeeper 笔记
java·分布式·zookeeper