mysql — почему этот вывод hex, а не предложение? разъем / переполнение стека

Я ожидал увидеть короткое английское предложение в качестве вывода, но я вижу шестнадцатеричное значение его instread. Я не могу найти какую-либо информацию об этой функции 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 {_Chcount = 26806164129143632} std :: basic_istream> *

0

Решение

(Это ответило на первую версию этого вопроса, который имел cout << stream << endl; заявление.)


Вы печатаете istream *,

Я полагаю, вы хотели бы прочитать из этого istream и распечатать то, что вы прочитали, например, с

string s;
while (getline(*stream, s))
cout << s << endl;
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]