Advanced Services | Objektorientierter Zugriff auf MySQL |
Die folgende Anleitung beschreibt die Erzeugung einer DLL und einer LIB unter Windows mit Visualstudio 2005
aus den CPP-Quelldateien die man im Paket
mysql++-3.0.6.tar.gz von tangentsoft hier erhält.
Beim Entpacken entsteht u.a. ein Verzeichnis "\mysql++-3.0.6\lib" .
Zunächst wird ein neues leeres Projekt in VisualStudio 2005 angelegt. Wir nennen es "mysqlpp".
Nun kopiert man sämtliche *.h und *.cpp aus "\mysql++-3.0.6\lib" in das Projektverzeichnis
(...\Eigene Dateien\Visual Studio 2005\Projects\mysqlpp\mysqlpp) des neu angelegten Projekts.
Weiter im ProjektmappenExplorer. Auf "Quelldateien" gehen, mit rechter Maustaste Kontextmenu anzeigen lassen,
"Hinzufügen" -> "Vorhandenes Element" wählen. Es erscheint ein Dateiauswahldialog,
der sämtliche Dateien aus dem Projektverzeichnis anzeigt. Mit Ctrl a alles
markieren und "Hinzufügen" wählen. Dabei erscheinen die Headerdateien auch unter den
Quelldateteien, das ist aber egal.
Nun muß man die Projekteinstellungen vornehmen: Über "Projekt -> Eigenschaften" kommt man zu "Eigenschaftsseiten".
Hier wählt man als Konfigurationseigenschaften Allgemein Konfigurationstyp "Dynamische Bibliothek".
Als nächstes wählt man C/C++ -> Allgemein an und trägt ein zusätzliches Includeverzeichnis ein, etwa
"C:\Programme\MySQL\MySQL-Server-5.0\include", je nachdem welchen Pfad man für die MySQL-Installation
gewählt hat. Der Eintrag unter "Debuginformationsformat" ist notwendig.
Unter "Optimierung" werden dann die folgenden Einstellungen vorgenommen:
folgende Präprozessordefinitionen werden als nächstes eingetragen:
_USRDLL
DLL_EXPORTS
_DEBUG
UNICODE
_UNICODE
MYSQLPP_MAKING_DLL
HAVE_MYSQL_SSL_SET
Unter "Codegenerierung" muß man die vier fettgedruckten Einstellungen vornehmen.
Alle weiteren Einstellungen werden nicht geändert. Hier die sich aus den Einstellungen ergebende Befehlszeile:
Mit diesen Einstellungen sollte sich die jede der CPP-Dateien kompilieren lassen. Man kann dies etwa mit
der Datei "beemutex.cpp" ausprobieren.
Unter "Allgemein" muß der Pfad zur MySQL-C-Bibliothek angegeben werden:
C:\Programme\MySQL\MySQL-Server-5.0\lib\opt
Unter "Eingabe" werden bei "Zusätzliche Abhängigkeiten" die beiden folgenden Bibliotheken angegeben.
Unter "Befehlszeile" muß bei "Zusätzliche Optionen" nochmal der Name der C-Bibliothek eingetragen werden.
Mit diesen Einstellungen kann man das Projekt erstellen.
Im Verzeichnis "DEBUG" findet man nach dem Erstellen die gewünschten Dateien "mysqlpp.dll"
und "mysqlpp.lib" .
Wer sich die Mühe des Erstellens sparen will, kann die Dateien auch herunterladen.
Hier können Sie die beiden Dateien in gepackter Form herunterladen.
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.
Unter Compiler -> Allgemein -> Zusätzliche Include-Verzeichnisse muß auf die Header gezeigt werden,
die die CPP-Deklarationen enthalten: "...\mysql++-3.0.6\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 soeben erstellten
Bibliothek "mysqlpp.lib" ein.
Unter Linker -> Befehlszeile -> Zusätzliche Optionen muß darüber hinaus der Name der Bibliothek
angeben werden, hier "mysqlpp.lib".
Zum Schluß muß die zur Bibliothek gehörende DLL-Datei (mysqlpp.dll) ins Windowssystemverzeichnis
kopiert werden: C:\WINDOWS\system32 .
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; }