3

C++プログラムからMySQLデータベースへの接続に問題があります。

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から接続して機能します)、DBは稼働しています。

他にどこを見ればいいのかわからない…
ありがとう。

プラットフォーム:
Linux-OpenSuse 11.4
MySQL 5.x
MySQL Connector / C ++ 1.0.5


更新:
MySQL Connector / C ++とBoostの間で発生する可能性のある競合についてどこかで読んだので、boost::shared_ptrの代わりにプレーンポインターを使用しようとしました。何も変わっていません。


更新2:
このコードをメインプログラムから分離すると、接続は正常に行われます。
私は全体像を見なければなりません...

4

2 に答える 2

0

このリンクを確認してくださいhttp://dev.mysql.com/tech-resources/articles/mysql-connector-cpp.html#test

問題は、dbで作成している接続にあります

    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);
于 2013-02-05T10:57:28.647 に答える
0

新しいテスト プロジェクトでデータベースにアクセスするためのコードをカット アンド ペーストすると、すべて正常に動作します。
例外は生成されず、接続が確立されます。

これは、プロジェクトの残りの部分で何が起こるかを確認する必要があることを意味します。

于 2013-02-07T11:06:02.463 に答える