当前位置: 首页 > news >正文

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

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

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

 
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接口函数,增量写入数据

 

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相关的函数 。


http://www.mrgr.cn/news/457.html

相关文章:

  • 高级java每日一道面试题-2024年8月15日-设计模式篇-设计模式与面向对象原则的关系是什么?
  • 构筑信息安全的桥梁:安全信息交换(SIX)全面解析
  • C++之函数传参方式
  • ImageMagick从pdf导出高清图片
  • 宝兰德荣获openEuler项目群青铜捐赠人称号,共筑开源生态繁荣新篇章
  • STM32标准库学习笔记-9.DMA 直接存储器存取
  • 二、前后端分离通用权限系统(2)
  • 笑出腹肌!Ubuntu:如果连猫都会用,那你呢?‍
  • Java语言程序设计——篇十五(1)
  • Python实现人脸轮廓提取
  • AWS 注册是否必须提供信用卡号?
  • Qt/QML学习-StackView
  • 【笔试题面试题】(网络编程类1)知识点汇总,常用概念
  • Vue 3 + 天地图 + D3.js 绘制行政区划
  • 4.vue中引入axios
  • 关于鸿蒙开发中装饰器@Extend、@Styles、@Builder的介绍
  • Linux - 权限
  • PostgreSQL的walwriter进程
  • 【SpringBoot】SpringBoot项目中实现数据缓存
  • 家里养有宠物,宠物空气净化器真的能除毛除臭吗?