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;
}
あなたが投稿した小さなスニペットからは伝えられません。 [mcve]を投稿してください。 – rustyx
あなたの設計が奇妙です - 例外をクライアントに返すのではなく、例外をキャッチする 'DBManager'コンストラクタがあります。したがって、あなたの 'DBManager'オブジェクトは正しく初期化されませんが、ユーザは引き続き使用できます。 – PaulMcKenzie
@RustyXよろしくお願いします。 – mkkekkonen