如何使用Oracle ODBC获取BLOB数据

膨胀的

我正在尝试获取存储在BLOB中的图像,然后将其另存为jpg。

在这里,我检索二进制数据并将其保存在str中;

  string str;
  SQLCHAR buf[500] = {0};
  while ((SQL_SUCCEEDED(SQLGetData(StmtHandle, colnum, SQL_C_BINARY, buf, sizeof(buf), NULL))))
  {
     string data(reinterpret_cast< const char* >(buf), reinterpret_cast< const char* >(buf) +    sizeof(buf));
     str = str + data;
  }

然后我将其写入文件

ofstream file;  
file.open("C:\\Users\\tom\\Desktop\\img.jpeg");
file << str;
file.close();

我得到了不正确的图像。

这有什么错数据抽取(我用的这个方法这个)?

西尔万·勒鲁(Sylvain Leroux)

我不熟悉ODBC编程,但是乍看之下,我可以看到的一个问题是您假设数据长度是缓冲区大小的倍数。但是不能保证最后一次读取将返回准确的500字节的数据。

你应该写这样的东西。可能是:

  string str;
  SQLCHAR buf[500];
  SQLLEN cbLeft;      // #bytes remained

  while ((SQL_SUCCEEDED(SQLGetData(StmtHandle, 
                                   colnum, 
                                   SQL_C_BINARY, 
                                   buf, 
                                   sizeof(buf),
                                   &cbLeft))))
  //                               ^^^^^^^
  {
          string data(reinterpret_cast< const char* >(buf),
                      reinterpret_cast< const char* >(buf)
                      + cbLeft);
          //            ^^^^^^
          str = str + data;

请花几分钟查看使用长度/指标值,以检查如何使用长度/指标值

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用纯Perl获取Blob上传的数据

如何使用FireDAC设置与Oracle的ODBC连接?

如何使用 Python 将 BLOB 插入 Oracle?

如何使用Java从Oracle数据库获取记录

如何将数据从SQL数据库获取到存储Blob中以获取参考数据

如何通过ODBC从系统间缓存数据库中获取数据?

使用myBatis从数据库中将blob作为字节[]获取

R:如何使用RJDBC从Oracle数据库下载Blob数据?

Oracle从BLOB获取XML

如何使用 C# 从 Oracle 获取响应?

如何使用“ Not In” oracle来获取记录

Perl DBI / MS ODBC 驱动程序 (LinuxL:RHEL) / SQL-Server:如何插入/更新 BLOB varbinary(max) 数据?

如何使用 Oracle 数据透视表查询?

如何使用Oracle 11查询数据

如何使用Blob对象将较大的原始XML文件写入Oracle数据库?

如何在ODBC源中的sql查询表单excel单元格中获取数据范围

如何在 Oracle 中使用 PHP - ODBC 上传文件?

使用 ODBC 或 JDBC 获取 Select 语句的列元数据的标准方法?

如何在php中使用blob图像获取所有数据库记录

如何使用PHP从二进制Blob数据中获取BMP图像

在Oracle中获取多个Blob

Oracle ODBC默认数据库

如何在Oracle中获取批量数据?

如何使用sql在Oracle中获取一对多关系的数据?

如何获取使用Enter-query操作生成Oracle表单的数据块默认值

如何在 Oracle 中使用 LAG 获取先前值但未包含在检索到的数据中?

如何使用Oracle数据库日期表获取最小日期

如何使用Vert.x将Blob插入到Oracle数据库11g中?

使用 java 从 oracle 的 Varray 中获取数据