2016-09-27 2 views
0

Я использую visual C++, я связан с libaries C++-коннектором (MySQL Connector C++ 1.1.7) и boost (boost_1_61_0).Не удается прочитать результат из mysql

Я использую 32-разрядный разъем для mysql, 64-разрядный разъем не работает вообще.

У меня есть окна 10 (64 бит)

компилирует.

Но он выходит из строя, когда отладчик приходит к строке cout << res->getString(1) << endl; пример взят из https://dev.mysql.com/doc/connector-cpp/en/connector-cpp-examples-complete-example-1.html

Код:

#include <stdlib.h> 
#include <iostream> 


#include "mysql_connection.h" 

#include <cppconn/driver.h> 
#include <cppconn/exception.h> 
#include <cppconn/resultset.h> 
#include <cppconn/statement.h> 

using namespace std; 

int main(void) 
{ 
    cout << endl; 
    cout << "Running SELECT * from cars" << endl; 


    try { 
    sql::Driver *driver; 
    sql::Connection *con; 
    sql::Statement *stmt; 
    sql::ResultSet *res; 

    /* Create a connection */ 
    driver = get_driver_instance(); 
    con = driver->connect("tcp://localhost:3306", "root", "*****"); 
    /* Connect to the MySQL test database */ 
    con->setSchema("sakila"); 

    stmt = con->createStatement(); 
    res = stmt->executeQuery("SELECT * from cars"); 
    while (res->next()) { 

     cout << res->getString(1) << endl; 


    } 
    delete res; 
    delete stmt; 
    delete con; 

    } 
    catch (sql::SQLException &e) { 
    cout << "# ERR: SQLException in " << __FILE__; 
    cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl; 
    cout << "# ERR: " << e.what(); 
    cout << " (MySQL error code: " << e.getErrorCode(); 
    cout << ", SQLState: " << e.getSQLState() << ")" << endl; 
    } 

    cout << endl; 

    return EXIT_SUCCESS; 
} 

Сообщение об ошибке:

Unhandled exception at 0x01327EA6 (msvcp120d.dll) in cppMySql.exe: 0xC0000005: Access violation reading location 0xCCCCCCCC 
+0

Вы пытались выполнить запрос из командной строки или через Workbench MySQL? – PaulF

+0

PaulF -> Да из верстака и он работает – Niklas

+0

При использовании workbench вы подключаетесь так же, используя tcp: // localhost: 3306, или используете tcp: //127.0.0.1: 3306. Хотя, как правило, то же самое, MySQL делает различие между этими двумя и вам может потребоваться проверить, что у вас есть тот же набор разрешений. Вы прошли через код и проверили значение res после вызова executeQuery? – PaulF

ответ

2

После просмотра исходного раствора I упомянутый в моих комментариях, мне удалось воссоздать вашу ситуацию. & нашел, что у меня точно такие же ошибки. Для этого я решил это:

cout << res->getString(1).c_str() << endl; 
+0

Это действительно раздражает, когда код примера не работает. Рад помочь. – PaulF

Смежные вопросы