gpt4 book ai didi

c++ - sqlite3 C++ : retrieving a blob

转载 作者:行者123 更新时间:2023-12-05 07:46:59 30 4
gpt4 key购买 nike

我有一个 sqlite3 数据库,其中以 BLOB 形式存储了一个 .png 图像

我正在尝试像这样通过 C++ 接口(interface)检索原始数据

RawImageWrapper* obj = 0;
int rc = sqlite3_exec(db, action.c_str(), imageSelectCallback, obj, &errMsg);

其中 action 只是我的 SQL 语句(它返回正确的记录)并且 RawImageWrapper 看起来像这样

struct RawImageWrapper
{
int callback(int argc, char **argv, char **azColName) {
for (int i = 0; i < argc; i++) {
if (strcmp(azColName[i], "Image") == 0) {
buff = std::string(argv[i]);
return 0;
}
}
return 1;
}

std::string buff;
};

使用字符串来保存图像数据可能不是最好的,但我只是想要一个快速对象来包装 char[]。然而,当它试图构造 buff 时,这会因访问冲突而失败。

从我的数据库中检索此图像 blob 并将其加载到某个容器中的正确方法是什么?我计划稍后根据原始数据重建图像

最佳答案

sqlite3 blob 数据的问题是,如果您不知道 blob 的大小,则无法构造 stringchar* 中的任何其他对象。因为 blob 数据可以有 null 值,当您生成 string 时,它会在获得 null 时立即停止,忽略其余数据。

我知道有两种方法可以解决这个问题:

  1. SELECT 语句添加一个额外的输出,格式为 LENGTH(BLOB_COLUMN),它以字节为单位提供 blob 列的大小。
  2. 使用 select hex(BLOB_COLUMN) from ... 将 blob 列转换为十六进制值,现在您将获得一个普通的十六进制 string,此后您必须将其转换得到 raw byte array .

关于c++ - sqlite3 C++ : retrieving a blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40292096/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com