Не удается подключиться к базе данных MySQL из программы на C ++ с MySQL, Connector / C ++: выброшено исключение

У меня проблема с подключением к базе данных MySQL из программы на C ++:

std::string server, user, password;
SetParams(server, user, password);
boost::shared_ptr<sql::Connection> conn;
sql::Driver *driver = get_driver_instance();

if(driver == 0) { /* error; never reached */ }

try {
conn.reset(driver->connect(server, user, password));

assert(conn != 0);

if(!conn->isClosed())    // <-- exception thrown
{
// Connection established
}
else {
// Connection failed
}
}
catch (sql::SQLException &e)
{
cerr << e.what << e.getErrorCode() << e.getSQLState() << endl;
}

sql::Connection::isClosed() функция выдает это исключение:

SQLException: Connection has been closed
MySQL error code: 0
SQLState: HY000

Значения для сервера, пользователя и пароля верны (они работают при подключении из MySQL-Workbench), БД запущена и работает.

Я не знаю, где еще искать …
Спасибо.

Платформа:
Linux — OpenSuse 11.4
MySQL 5.x
MySQL, Connector / C ++ 1.0.5


Обновить:
Поскольку я где-то читал о возможных конфликтах между MySQL Connector / C ++ и Boost, я попытался использовать простой указатель вместо boost :: shared_ptr. Ничего не изменилось.


Обновление 2:
Выделив этот код из основной программы, соединение установлено успешно.
Я должен смотреть на картину в целом …

3

Решение

Проверьте эту ссылку http://dev.mysql.com/tech-resources/articles/mysql-connector-cpp.html#test

Проблема в том, что вы создаете соединение с БД

    driver = get_driver_instance();
/* create a database connection using the Driver */
con = driver -> connect(url, user, password);
/* alternate syntax using auto_ptr to create the db connection */
//auto_ptr  con (driver -> connect(url, user, password));
/* turn off the autocommit */
con -> setAutoCommit(0);
cout << "\nDatabase connection\'s autocommit mode = " << con -> getAutoCommit() << endl;
/* select appropriate database schema */
con -> setSchema(database);
0

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

Вырезая и вставляя код для доступа к базе данных в новом тестовом проекте, все работает отлично.
Исключение не генерируется, и соединение установлено.

Это означает, что я должен посмотреть на то, что происходит в остальной части проекта.

0

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