Advanced Services | Objektorientierter Zugriff auf MySQL |
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.
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.
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.
Unter Linker -> Befehlszeile -> Zusätzliche Optionen muß darüber hinaus der Name der Bibliothek
explizit angeben werden, hier "mysqlpp_d.lib".
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; }