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++.


Anmelden zum Antworten