Die folgenden beiden Beispielprogramme müssten unverändert auf Linux oder FreeBSD laufen. Für andere Betriebssysteme sind kleinere Anpassungen erforderlich, hauptsächlich für die Dateipfade. Die Beispiele sollen genügend Einzelheiten vermitteln, um das Problem zu verdeutlichen, aber ohne den ganzen Ballast, der für eine echte Anwendung notwendig wäre. Das erste Beispiel ist ganz einfach, das zweite ein wenig fortgeschrittener, da es eine Fehlerprüfung enthält. Das erste wird gefolgt von einem Kommandozeileneintrag, mit dem man es kompilieren kann. Unter dem zweiten wird stattdessen eine GNU-Makefile für die Kompilierung angegeben.
Beispiel 1
test1_libmysqld.c
#include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include "mysql.h" MYSQL *mysql; MYSQL_RES *results; MYSQL_ROW record; static char *server_options[] = { "mysql_test", "--defaults-file=my.cnf" }; int num_elements = sizeof(server_options)/ sizeof(char *); static char *server_groups[] = { "libmysqld_server", "libmysqld_client" }; int main(void) { mysql_server_init(num_elements, server_options, server_groups); mysql = mysql_init(NULL); mysql_options(mysql, MYSQL_READ_DEFAULT_GROUP, "libmysqld_client"); mysql_options(mysql, MYSQL_OPT_USE_EMBEDDED_CONNECTION, NULL); mysql_real_connect(mysql, NULL,NULL,NULL, "database1", 0,NULL,0); mysql_query(mysql, "SELECT column1, column2 FROM table1"); results = mysql_store_result(mysql); while((record = mysql_fetch_row(results))) { printf("%s - %s \n", record[0], record[1]); } mysql_free_result(results); mysql_close(mysql); mysql_server_end(); return 0; }
Das Programm wird mit folgender Kommandozeile kompiliert:
gcc test1_libmysqld.c -o test1_libmysqld -lz \ `/usr/local/mysql/bin/mysql_config --include --libmysqld-libs`
Beispiel 2
Um das Beispiel auszuprobieren, legen Sie ein Verzeichnis namens
test2_libmysqld
auf derselben Ebene wie das
MySQL-Quellverzeichnis an. Speichern Sie die Quelldatei
test2_libmysqld.c
und die
GNUmakefile
in dieses Verzeichnis und
führen Sie GNU make
innerhalb des
test2_libmysqld
-Verzeichnisses aus.
test2_libmysqld.c
/* * Ein einfacher Beispielclient, der die MySQL Embedded Server-Bibliothek benutzt */ #include <mysql.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> MYSQL *db_connect(const char *dbname); void db_disconnect(MYSQL *db); void db_do_query(MYSQL *db, const char *query); const char *server_groups[] = { "test2_libmysqld_SERVER", "embedded", "server", NULL }; int main(int argc, char **argv) { MYSQL *one, *two; /* mysql_server_init() muss vor allen anderen mysql-* Funktionen aufgerufen werden. * * Sie können die Funktion mysql_server_init(0, NULL, NULL) benutzen; sie initialisiert * den Server mit groups = { * "server", "embedded", NULL * }. * * Eventuell setzen Sie Folgendes in Ihre $HOME/.my.cnf-Datei: [test2_libmysqld_SERVER] language = /path/to/source/of/mysql/sql/share/english * Natürlich können Sie argc und argv auch ändern, ehe Sie sie an * diese Funktion übergeben. Oder Sie erstellen neue, ganz nach Bedarf. * Doch alle Argumente in argv (außer dem Programmnamen * argv[0]) sollten gültige Optionen * für den MySQL Server sein. * * Wenn Sie diesen Client mit der normalen mysqlclient-Bibliothek verlinken, * ist diese Funktion lediglich ein Funktionsrumpf, der nichts weiter tut. */ mysql_server_init(argc, argv, (char **)server_groups); one = db_connect("test"); two = db_connect(NULL); db_do_query(one, "SHOW TABLE STATUS"); db_do_query(two, "SHOW DATABASES"); mysql_close(two); mysql_close(one); /* Dies muss nach allen anderen mysql-Funktionen aufgerufen werden. */ mysql_server_end(); exit(EXIT_SUCCESS); } static void die(MYSQL *db, char *fmt, ...) { va_list ap; va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); (void)putc('\n', stderr); if (db) db_disconnect(db); exit(EXIT_FAILURE); } MYSQL * db_connect(const char *dbname) { MYSQL *db = mysql_init(NULL); if (!db) die(db, "mysql_init failed: no memory"); /* * Beachten Sie, dass Client und Server verschiedene Gruppennamen verwenden. * Das ist wichtig, da der Server nicht die Optionen des Clients und dieser nicht die Optionen * des Servers akzeptiert. */ mysql_options(db, MYSQL_READ_DEFAULT_GROUP, "test2_libmysqld_CLIENT"); if (!mysql_real_connect(db, NULL, NULL, NULL, dbname, 0, NULL, 0)) die(db, "mysql_real_connect failed: %s", mysql_error(db)); return db; } void db_disconnect(MYSQL *db) { mysql_close(db); } void db_do_query(MYSQL *db, const char *query) { if (mysql_query(db, query) != 0) goto err; if (mysql_field_count(db) > 0) { MYSQL_RES *res; MYSQL_ROW row, end_row; int num_fields; if (!(res = mysql_store_result(db))) goto err; num_fields = mysql_num_fields(res); while ((row = mysql_fetch_row(res))) { (void)fputs(">> ", stdout); for (end_row = row + num_fields; row < end_row; ++row) (void)printf("%s\t", row ? (char*)*row : "NULL"); (void)fputc('\n', stdout); } (void)fputc('\n', stdout); mysql_free_result(res); } else (void)printf("Affected rows: %lld\n", mysql_affected_rows(db)); return; err: die(db, "db_do_query failed: %s [%s]", mysql_error(db), query); }
GNUmakefile
# Dies setzt voraus, dass die MySQL-Software in /usr/local/mysql installiert ist inc := /usr/local/mysql/include/mysql lib := /usr/local/mysql/lib # Wenn Sie die MySQL-Software noch nicht installiert haben, versuchen Sie dies: #inc := $(HOME)/mysql-5.1/include #lib := $(HOME)/mysql-5.1/libmysqld CC := gcc CPPFLAGS := -I$(inc) -D_THREAD_SAFE -D_REENTRANT CFLAGS := -g -W -Wall LDFLAGS := -static # Sie können -lmysqld in -lmysqlclient ändern, um die # Client/Server-Bibliothek zu benutzen LDLIBS = -L$(lib) -lmysqld -lz -lm -lcrypt ifneq (,$(shell grep FreeBSD /COPYRIGHT 2>/dev/null)) # FreeBSD LDFLAGS += -pthread else # Linux vorausgesetzt LDLIBS += -lpthread endif # Dies funktioniert für einfache Testprogramme mit nur einer einzigen Datei sources := $(wildcard *.c) objects := $(patsubst %c,%o,$(sources)) targets := $(basename $(sources)) all: $(targets) clean: rm -f $(targets) $(objects) *.core
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.