У меня MySQL 5.6 с коннектором c ++ 1.1.3. Моя проблема в том, что я не могу отобразить строковые данные из моей таблицы, в то время как данные из i.e INT могут перечислять без проблем. Пожалуйста, посмотрите на это:
/* INSERT TUTORIAL CODE HERE! */
sql::Driver *driver = get_driver_instance();
std::auto_ptr<sql::Connection> con(driver->connect("tcp://127.0.0.1:3307", "root", "pass"));
con->setSchema("mybase");
std::auto_ptr<sql::Statement> stmt(con->createStatement());
//example from dev/mysql site
stmt->execute("DROP TABLE IF EXISTS mcountry");
stmt->execute("DROP PROCEDURE IF EXISTS add_ctry");
stmt->execute("DROP PROCEDURE IF EXISTS getdata");
stmt->execute("CREATE TABLE mcountry(country_id INT)");
stmt->execute("CREATE PROCEDURE add_ctry(IN cname INT) BEGIN INSERT INTO mcountry(country_name) VALUES (cname); END;");
stmt->execute("CREATE PROCEDURE getdata() BEGIN SELECT * FROM mcountry; END;");
stmt->execute("CALL add_ctry(112)");
stmt->execute("CALL add_ctry(323)");
stmt->execute("CALL getdata()");
std::auto_ptr<sql::ResultSet> res;
do{
res.reset(stmt->getResultSet());
while(res->next())
{
cout << "ID: " << res->getInt(1);
}
} while(stmt->getMoreResults());
И это прекрасно работает. Проблема в том, когда я меняю переменную с INT на CHAR (somevalue) следующим образом:
sql::Driver *driver = get_driver_instance();
std::auto_ptr<sql::Connection> con(driver->connect("tcp://127.0.0.1:3307", "root", "pass"));
con->setSchema("mybase");
std::auto_ptr<sql::Statement> stmt(con->createStatement());
//example from dev/mysql site
stmt->execute("DROP TABLE IF EXISTS mcountry");
stmt->execute("DROP PROCEDURE IF EXISTS add_ctry");
stmt->execute("DROP PROCEDURE IF EXISTS getdata");
stmt->execute("CREATE TABLE mcountry(country_name CHAR(3))");
stmt->execute("CREATE PROCEDURE add_ctry(IN cname CHAR(3)) BEGIN INSERT INTO mcountry(country_name) VALUES (cname); END;");
stmt->execute("CREATE PROCEDURE getdata() BEGIN SELECT * FROM mcountry; END;");
stmt->execute("CALL add_ctry('abc')");
stmt->execute("CALL add_ctry('def')");
stmt->execute("CALL getdata()");
std::auto_ptr<sql::ResultSet> res;
string str;
do{
res.reset(stmt->getResultSet());
while(res->next())
{
//cout << "Name: " << res->getString(1);
str = res->getString(1);
cout << str; //now instead of abc and def i get NON ASCI character
}
} while(stmt->getMoreResults());
И я получаю сообщение об ошибке: необработанное исключение в 0x70481174 в tstproj.exe: 0xC0000005: Место чтения нарушения доступа 0x00221000.
И VS2010 перенаправить меня на строку стандартного заголовка и там указать на:
if (_State == ios_base::goodbit
&& _Ostr.rdbuf()->sputn(_Str.c_str(), _Size) != (streamsize)_Size)
_State |= ios_base::badbit;
Спасибо за любой ответ.
Задача ещё не решена.