2017-10-25 10 views
0

C++でMySQLデータベースへの接続を作成するという簡単な作業に問題があります。プログラムの戻り値-1以外のエラーは出力されません。MySQL C++コネクタがエラーメッセージなしで失敗する

私はIDEとしてEclipse Oxygenを使用していますが、OSはUbuntu 16.04です。 MySQLコネクタのバージョンは1.1.9です。これは一般的なLinuxバージョン(glibc 2.12)です。

コネクタファイルは私のホームフォルダにあります。私は、プロパティ - > C/C++のビルド - >設定 - > GCC C++コンパイラ - >インクルードに "インクルード"フォルダのディレクトリパスを追加しました。また、 "lib"パスと "mysqlcppconn"ライブラリ名をProperties - > C/C++ Build - > Settings - > GCC C++リンカ - >ライブラリとライブラリ検索パスにそれぞれ追加しました。最後に、Properties - > Run/Debug Settings - >(Launch configuration) - > EnvironmentのLD_LIBRARY_PATH環境変数に "lib"パスを追加しました。

DBManager.cpp:

DBManager::DBManager() { 
    try { 
     std::cout << "Getting driver instance" << std:endl; 
     driver = sql::mysql::get_mysql_driver_instance(); 
     std::cout << "Creating connection" << std::endl; 
     connection = driver->connect("tcp://127.0.0.1:3306", "username", "password"); 
     std::cout << "Connected!" << std::endl; // NOT REACHING THIS LINE 
    } catch(const SQLException& ex) { 
     // these lines are not printed 
     std::cout << "Exception!" << std::endl; 
     std::cout << ex.what() << std::endl; 
     exit(1); 
    } 
} 

DBManager::~DBManager() { 
    std::cout << "Deleting connection" << std::endl; 
    delete connection; 
} 

DBManager.h

#ifndef DBMANAGER_H_ 
#define DBMANAGER_H_ 

#include <iostream> 
#include <mysql_connection.h> 
#include <mysql_driver.h> 
#include <cppconn/exception.h> 

class DBManager { 
public: 
    DBManager(); 
    virtual ~DBManager(); 
private: 
    sql::mysql::MySQL_Driver* driver; 
    sql::Connection* connection; 
}; 

#endif 

私は最終的にそれが動作するようになったmain.cppに

#include <iostream> 
#include "DBManager.h" 

int main(int argc, char* argv[]) {  

    std::cout << "Starting" << std::endl; 

    DBManager* dbManager = new DBManager(); 
    // ... program logic not reached 
    delete dbManager; // not reached 

    return 0; 
} 
+1

あなたが投稿した小さなスニペットからは伝えられません。 [mcve]を投稿してください。 – rustyx

+0

あなたの設計が奇妙です - 例外をクライアントに返すのではなく、例外をキャッチする 'DBManager'コンストラクタがあります。したがって、あなたの 'DBManager'オブジェクトは正しく初期化されませんが、ユーザは引き続き使用できます。 – PaulMcKenzie

+0

@RustyXよろしくお願いします。 – mkkekkonen

答えて

0

、私は最初に、一般的なLinuxバイナリを使用していましたこれはうまくいかなかった。私がUbuntuのバイナリを使用するように切り替えると、プログラムが動作し始めました。

enter image description here

関連する問題