如何使用oracle ODBC获取BLOB数据

时间:2014-12-24 10:44:18

标签: c++ oracle odbc

我正在尝试获取存储在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();

我得到的图像不正确。

这种数据提取方法有什么问题(我使用this)?

1 个答案:

答案 0 :(得分:0)

我不熟悉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;

请花几分钟时间查看Using Length/Indicator Values,以检查长度/指标值的使用方式。