Advanced Services | Verbindung zu MySQL mit C-Bibliotheksfunktionen aus "mysql.h" |
Um mit C auf MySQL zuzugreifen braucht man spezielle Include Dateien und Bibliotheken. bei der Installation von
MySQL muß in diesem Fall darauf geachtet werden, daß man die "developer components" mitinstalliert. Am einfachsten
geht das, indem man eine Komplettinstallation von MySQL vornimmt. Im folgenden finden Sie die Pfade zu den Includes und
Libraries. Für neuere Versionen von MySQL passen Sie die Pfade entsprechend an. Die Verzeichnisse /include und /lib
existieren auch in diesen Versionen.
Pfad zu den benötigten Headern
C:\Programme\MySQL\MySQL Server 5.1\include
Pfad zur Datei "libmysql.dll"
C:\Programme\MySQL\MySQL Server 5.1\lib\debug
Die englische Fassung findet sich unter
http://dev.mysql.com/doc/refman/5.1/en/index.html
Im Kapitel 20 (Connectors and APIs) findet man im Abschnitt 20.9. die "MySQL C API".
Hier werden alle C-Funktionen beschrieben, die man zum Zugriff auf MySQL braucht.
Die etwas ältere deutsche Fassung findet sich unter
http://dev.mysql.com/doc/refman/5.1/de/index.html
Hier findet man die API im Kapitel 24 (APIs und Bibliotheken). Im Abschnitt 24.2. (MySQL-C-API)
werden die C-Funktionen beschrieben, die man zum Zugriff auf MySQL braucht.
projekt --> eigenschaften (eigenes fenster) --> konfigurationseigenschaften --> linker --> allgemein --> zusätzliche bibliotheksverzeichnisse hier das zusätzliche verzeichnis "C:\Programme\MySQL\MySQL Server 5.1\lib\opt" angeben linker --> befehlszeile --> zusätzliche optionen hier die bibliothek angeben, die eingebunden werden soll: "libmysql.lib"
In der Datei C:\Programme\MySQL\MySQL Server 5.1\include\mysql_com.h diese Zeilen auskommentieren:
ca. zeile 243 my_socket fd; /* For Perl DBI/dbd */ ca. zeile 427 int my_connect(my_socket s, const struct sockaddr *name, unsigned int namelen, unsigned int timeout);
Falls man obige Einträge nicht findet, öffnet man die Datei mit einem ASCII-Editor und sucht nach "my_socket fd" und nach "int my_connect".
#include "stdafx.h" #include "C:\Programme\MySQL\MySQL Server 5.1\include\mysql.h" #include <iostream> /* Man kann in den Projekteinstellungen auch ein externes Includeverzeichnis eingeben, dann reicht #include "mysql.h" */ using namespace std; int _tmain(int argc, _TCHAR* argv[]) { MYSQL *conn; mysql_server_init(0, NULL, NULL); conn = mysql_init(NULL); if (conn == NULL) { cout << "Keine Datenbankinitialisierung moeglich!\n"; return -1; } cout << "Datenbank initialisiert!\n"; if (mysql_real_connect(conn,"localhost", "root", "root", "test", 3306, NULL, 0) == NULL) { cout << "Datenbank test konnte nicht geoeffnet werden!\n"; cout << "Error: " << mysql_error(conn) << endl; return -1; } cout << "datenbank test wurde geoeffnet!\n"; cout << "\nein paar ausgaben aus der tabelle adressen der test-datenbank:\n"; MYSQL_FIELD *field; MYSQL_RES *result; MYSQL_ROW row; unsigned long *fieldLengths; mysql_query(conn, "SELECT * FROM namen"); /* "namen" ist der Name der Tabelle auf die zugegriffen werden soll ! */ result = mysql_store_result(conn); unsigned int fieldNumbers = mysql_num_fields(result); cout << "\nAnzahl der Spalten : " << fieldNumbers << endl; while ((row = mysql_fetch_row(result))) { fieldLengths = mysql_fetch_lengths(result); for(int i = 0; i < fieldNumbers; i++) { if (row[i]==0) { printf(" (null) "); } else { //printf("%s ", row[i] ); cout << row[i] << " " ; } } // end for cout << endl; } // end while mysql_free_result(result); mysql_close(conn); cout << "\nDatenbank test wurde wieder geschlossen!\n"; mysql_server_end(); return 0; }