Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么输出十六进制而不是一个句子?连接器/c++_C++_Mysql_Mysql Connector_Istream_Connector - Fatal编程技术网

为什么输出十六进制而不是一个句子?连接器/c++

为什么输出十六进制而不是一个句子?连接器/c++,c++,mysql,mysql-connector,istream,connector,C++,Mysql,Mysql Connector,Istream,Connector,我本来希望看到一个简短的英语句子作为输出,但我看到它的十六进制值。我找不到关于这个getblob函数的任何信息,但我听说它应该用于varchar列。在我使用getString并使应用程序崩溃之前,这很有趣,因为它有时会在成功打印句子后崩溃。但是我不能让它崩溃,所以我需要让它与getblob一起工作,它返回一个std::istream,我对此一无所知。我曾尝试将istream转换为字符串,但我对isteam是什么缺乏理解,这并没有让我走得更远 #include <iostream> #

我本来希望看到一个简短的英语句子作为输出,但我看到它的十六进制值。我找不到关于这个getblob函数的任何信息,但我听说它应该用于varchar列。在我使用getString并使应用程序崩溃之前,这很有趣,因为它有时会在成功打印句子后崩溃。但是我不能让它崩溃,所以我需要让它与getblob一起工作,它返回一个std::istream,我对此一无所知。我曾尝试将istream转换为字符串,但我对isteam是什么缺乏理解,这并没有让我走得更远

#include <iostream>
#include <sstream>
#include <memory>
#include <string>
#include <stdexcept>

#include "cppconn\driver.h"
#include "cppconn\connection.h"
#include "cppconn\statement.h"
#include "cppconn\prepared_statement.h"
#include "cppconn\resultset.h"
#include "cppconn\metadata.h"
#include "cppconn\resultset_metadata.h"
#include "cppconn\exception.h"
#include "cppconn\warning.h"
#include "cppconn\datatype.h"   
#include "cppconn\parameter_metadata.h"
#include "mysql_connection.h"
#include "mysql_driver.h"

using namespace std;


int main()
{
    sql::mysql::MySQL_Driver *driver;
    sql::Connection *con;
    sql::Statement *stmt;

    // ...
    driver = sql::mysql::get_mysql_driver_instance();
    cout<<"Connecting to database...\n";
con = driver->connect("tcp://xx.xxx.xxx.xxx:3306", "xxxxx", "xxxxxx");


sql::ResultSet *res;
// ...
stmt = con->createStatement();
// ...
 con->setSchema("mrhowtos_main");
res = stmt->executeQuery("SELECT english FROM `eng` WHERE `ID` = 16;");
while (res->next()) {
      istream *stream = res->getBlob(1);

      string s; 
    getline(*stream, s); //crashes here - access violation
    cout << s << endl; 
}
cout<<"done\n";
delete res;
delete stmt;
delete con;
system("PAUSE");
    return 0;
}
更新:getline崩溃

getblob之后的流值:

流0x005f3e88{u Chcount=26806164129143632}std::basic_istream>*
这回答了这个问题的第一个版本,其中有一个cout,我用你的代码替换了cout行。它在getline的行上因访问冲突而崩溃。我想可能是因为s没有初始化。不,应该可以。您确定您的代码的其余部分按预期工作吗?例如,res->getBlob1确实返回一个生成查询结果的流?您是否应该在while循环的连续迭代之间关闭该流?尝试删除流;。getblob之后的stream的值似乎没有失败。下面是它在watch变量:+stream 0x00ab3e88{{u Chcount=48198262359153488}std::basic_istream*中所说的内容,即使我删除while循环并只使用getline一次,它也会在调用getline时崩溃
string s; 
while (getline(*stream, s))
  cout << s << endl;