MySQL Connector C++: Fehler bei connect()
-
Heyho.
Ich versuche gerade, eine Klasse basierend auf dem MySQL Connector C++ von mysql.com zu schreiben, mit der ich zu einem MySQL Server verbinden will.Rufe ich jedoch die Initialize() meiner Klasse auf, stürzt das Programm ab und meine IDE (VSC++ Express 2010) springt zu
mConnection = mDriver->connect(Host, User, Password);
Host, User, Password sind std::string, mDriver sql::Driver* und mConnection sql::Connection* (kompletter Code unten)
Vielleicht hat das etwas mit der Warnung zu tun, die ich bekomme?
c:\programme\mysql\mysql connector c++ 1.0.5\include\cppconn\exception.h(47): warning C4251: 'sql::SQLException::sql_state': class 'std::basic_string<_Elem,_Traits,_Ax>' erfordert eine DLL-Schnittstelle, die von Clients von class 'sql::SQLException' verwendet wird with [ _Elem=char, _Traits=std::char_traits<char>, _Ax=std::allocator<char> ]
Hier mal die Headerdatei meiner Klasse, MySQL.h:
#ifndef MYSQL_H #define MYSQL_H #include <string> #include <vector> #include <iostream> // MySQL Connector Headers #include <driver.h> #include <connection.h> #include <statement.h> #include <prepared_statement.h> #include <resultset.h> #include <metadata.h> #include <resultset_metadata.h> #include <exception.h> #include <warning.h> class MySQL { public: static void Initialize(std::string Host, std::string User, std::string Password, std::string Database); static void Dispose(); private: static sql::Driver* mDriver; static sql::Connection* mConnection; }; #endif
Und MySQL.cpp:
#include "MySQL.h" // Avoid LNK2001 sql::Driver* MySQL::mDriver; sql::Connection* MySQL::mConnection; void MySQL::Initialize(std::string Host, std::string User, std::string Password, std::string Database) { try { mDriver = get_driver_instance(); mConnection = mDriver->connect(Host, User, Password); mConnection->setAutoCommit(false); mConnection->setSchema(Database); } catch (sql::SQLException &e) { std::cout << "ERROR: SQLException in " << __FILE__; std::cout << " (" << __FUNCTION__ ") on line " << __LINE__ << std::endl; std::cout << "ERROR: " << e.what(); std::cout << " (MySQL error code: " << e.getErrorCode(); std::cout << ", SQLState: " << e.getSQLState() << ")" << std::endl; } catch (std::runtime_error &e) { std::cout << "ERROR: runtime_error in " << __FILE__; std::cout << " (" << __FUNCTION__ ") on line " << __LINE__ << std::endl; std::cout << "ERROR: " << e.what() << std::endl; } catch (std::exception &e) { std::cout << e.what() << std::endl; } } void MySQL::Dispose() { mConnection->close(); delete mConnection; }
Vielleicht hatte jemand schon das gleiche Problem, oder eine Idee, was ich falsch mache?
Danke schonmal,
Blay09
-
Hat sich erledigt, benutze jetzt MySQL++.