Advanced  Services Objektorientierter Zugriff auf MySQL Back Next Up Home

Erstellung einer DLL- und einer LIB-Datei für den objektorientierter Zugriff mit C++ auf MySQL (VS 2008/2010)

Die folgende Anleitung beschreibt die Erzeugung einer DLL und einer LIB unter Windows mit Visualstudio 2008 aus den CPP-Quelldateien die man im Paket

mysql++-3.1.0.tar.gz von tangentsoft erhält.

Die Anleitung folgt in Kürze. Zunächst wird hier die fertige Bibliothek und die zugehörige DLL angeboten. Mit diesen Beiden Dateien kann man das folgende Beispielprogramm ausführen.

Hier finden sie die Bibliothek mysqlpp_d.lib.

Hier finden sie die DLL mysqlpp_d.dll.

_d bedeutet, daß die Library und die DLL Debuginformation enthält. Ebenso kann man einhe Library und eine DLL ohne Debuginformation erstellen.


Objektorientierter Zugriff, ein Beispielprogramm

Nach dem Erstellen der beiden Dateien können wir nun ein Projekt anlegen, das einen einfachen Zugriff auf MySQL demonstriert. Dazu legen wir eine "normale" main() enthaltende Konsolenanwendung an. Allerdings müssen wir auch hier einige Projekteinstellungen vornehmen. Die Einstellungen sind (natürlich) für Bibliotheken mit und ohne Debuginformation dieselben.

Unter Compiler -> Allgemein -> Zusätzliche Include-Verzeichnisse muß auf die Header gezeigt werden, die die CPP-Deklarationen enthalten: "...\mysql++-3.1.0\lib" .
Des weiteren muß immer noch auf die Header der C-Bibliothek gezeigt werden: "C:\Programme\MySQL\<MySQL-Dir>\include.

screenshot11.jpg

Damit läßt sich die das Programm compilieren, zum Linken muß aber noch die soeben erstellte Bibliothek bekanntgegeben werden.

Unter Linker -> Allgemein -> Zusätzliche Bibliotheks-Verzeichnisse trägt man den Pfad zur Bibliothek "mysqlpp_d.lib" ein.

screenshot12.jpg

Unter Linker -> Befehlszeile -> Zusätzliche Optionen muß darüber hinaus der Name der Bibliothek explizit angeben werden, hier "mysqlpp_d.lib".

screenshot13.jpg

Zum Schluß muß die zur Bibliothek gehörende DLL-Datei mysqlpp_d.dll so plaziert werden, daß die von Visualstudio erzeugte EXE-Datei auf die DLL-Datei zugreifen kann. Hierzu gibt es zwei Möglichkeiten.

Mit diesen einstellungen läuft das folgende Programm.

/*
    Das Programm stellt eine Verbindung zur Datenbank "test" von MySQL her und gibt eine Tabelle mit dem
    Namen "namen" auf die Konsole aus.
*/

#include "stdafx.h"

// das include mysql++.h includiert die folgenden
//#include "connection.h"
//#include "cpool.h"
//#include "query.h"
//#include "sql_types.h"
//#include "transaction.h"

#include "mysql++.h"

// hier werden nur gebraucht:
//#include "connection.h"
//#include "query.h"

int _tmain(int argc, _TCHAR* argv[])
{
    // Get database access parameters e.g. from command line
    const char* db = 0, *server = 0, *user = 0, *pass = "";


    mysqlpp::Connection conn("test", "localhost","root", "root", 3306) ;  // (conn(db, server, user, pass, port))

    if( conn.connected() )
    {
        printf("verbindung hergestellt\n");
    }
    else
    {
        printf("verbindung konnte nicht hergestellt werden:\n");
        printf("%s\n", conn.error() );
        return 1;
    }

    /*
    // variante zu obiger Verbindungsherstellung
    // verbindungsloses Connectionobjekt erstellen
    mysqlpp::Connection conn(false);
    // verbindungsversuch
    bool connected = conn.connect( "test", "localhost","root", "root", 3306) ;  // (conn.connect(db, server, user, pass, port))
    // port ist optional, wenn er weggelassen wird, wird 3306 als default genommen.

    if(connected)
    {
        printf("verbindung hergestellt\n");
    }
    else
    {
        printf("verbindung konnte nicht hergestellt werden:\n");
        printf("%s\n", conn.error() );
        return 1;
    }
    */

    mysqlpp::Query query = conn.query("SELECT * FROM namen");

    mysqlpp::StoreQueryResult result = query.store();

    if(result)
    {
        printf("num_rows = %d\n", result.num_rows());  // anzahl der zeilen im resultset
        printf("num_fields = %d\n", result.num_fields());  // anzahl der spalten im resultset

        for (size_t i = 0; i < result.num_rows(); i++)
        {
            for (size_t j = 0; j < result.num_fields(); j++)
            {
                printf(result[i][j]);
                printf("\t");
            }
            printf("\n");
        }
    }
    else
    {
        printf("kein resultset erhalten\n");  //
        printf("%s\n", query.error() );
    }

    return 0;
}
Valid XHTML 1.0 Strict top Back Next Up Home