Я ожидал увидеть короткое английское предложение в качестве вывода, но я вижу шестнадцатеричное значение его 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:
(Это ответило на первую версию этого вопроса, который имел cout << stream << endl;
заявление.)
Вы печатаете istream *
,
Я полагаю, вы хотели бы прочитать из этого istream
и распечатать то, что вы прочитали, например, с
string s;
while (getline(*stream, s))
cout << s << endl;
Других решений пока нет …