sqlite3 c++: retrieving a blob
sqlite3 c++: retrieving a blob
我有一个sqlite3数据库,其中存储了一个。png图像作为BLOB
我试图通过c++接口像这样检索原始数据
RawImageWrapper* obj = 0;
int rc = sqlite3_exec(db, action.c_str(), imageSelectCallback, obj, &errMsg);
其中动作只是我的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的大小,那么你不能从char*
构建string
或任何其他对象。因为blob数据可以有null
值,当您生成string
时,它将在获得null
后立即停止,忽略其余数据。
我知道两个解决这个问题的方法:
- 在
SELECT
语句中添加LENGTH(BLOB_COLUMN)
形式的额外输出,以字节为单位给出blob列的大小。 - 将blob列转换为十六进制值使用
select hex(BLOB_COLUMN) from ...
,现在你得到一个正常的十六进制string
,此后你必须转换为原始字节数组。
相关文章:
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- WinVerifyTrust 仅在使用文件而不是内存 blob 时才有效
- protobuf C++ SQLite handle blob data
- 将图像魔术 blob 保存到节点缓冲区
- 给一个图 G 找到此图中的所有节点 blob,以便 node.color 属性 = 特定颜色
- MySQL c++ 连接器:使用 SetBlob() 在查询中设置多个 blob 数据的正确方法是什么?
- 当我调用它来解码 Blob 对象中的 png 图像时,"Magick++::readImages"引发警告
- Magick++没有加载TGA blob
- 错误:使用 tesseract 引擎时 C++ 中的声明'typedef struct tagBLOB BLOB'冲突
- Magick++ Blob to Image Error
- 从数据集 Blob 字段中打开和编辑文件
- 如何显示用于车辆分类的 Blob 大小
- 如何使用由 PNG 数据构建的 blob 初始化 Magick::Image obj(PNG 由 cv::imencod
- 如何使用ImageMagick Magick 将图像作为gif写为blob
- 提高 Blob 上传性能
- C++,sqlite3.当 BLOB 字段用作查询条件时如何处理它?
- C++ - 将 BLOB 存储为字符串
- C++驱动程序中 Blob 类型的映射
- Cassandra 中的 blob 数据类型
- sqlite3 c++: retrieving a blob