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

相关推荐
RainbowSea4 小时前
12. LangChain4j + 向量数据库操作详细说明
java·langchain·ai编程
RainbowSea5 小时前
11. LangChain4j + Tools(Function Calling)的使用详细说明
java·langchain·ai编程
考虑考虑9 小时前
Jpa使用union all
java·spring boot·后端
用户3721574261359 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
RestCloud9 小时前
SQL Server到Hive:批处理ETL性能提升30%的实战经验
数据库·api
RestCloud10 小时前
为什么说零代码 ETL 是未来趋势?
数据库·api
浮游本尊10 小时前
Java学习第22天 - 云原生与容器化
java
ClouGence12 小时前
CloudCanal + Paimon + SelectDB 从 0 到 1 构建实时湖仓
数据库
渣哥12 小时前
原来 Java 里线程安全集合有这么多种
java
间彧12 小时前
Spring Boot集成Spring Security完整指南
java