相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 36.3 mb
PDF (A4)- 36.3 mb
手册页(TGZ)- 235.6 kb
手册页(Zip)- 347.2 kb
信息(Gzip)- 3.3 mb
信息(邮政编码)- 3.3 mb
本手册节选

27.6.4嵌入式服务器举例

这两个示例程序在Linux或FreeBSD系统上不需要任何更改就可以工作。对于其他操作系统,需要进行一些小的更改,主要是修改文件路径。这些示例旨在为您提供足够的细节,以帮助您理解问题,而不会出现实际应用程序所必需的混乱情况。第一个例子非常简单。第二个示例稍微高级一些,包含一些错误检查。第一个语句后面是一个命令行条目,用于编译程序。第二个文件后面是一个GNUmake文件,可以用来进行编译。

示例1

test1_libmysqld.c

#include  #include  #include  #include " MYSQL .h"MYSQL_RES *结果;MYSQL_ROW记录;static char *server_options[] = \ {"mysql_test", "——defaults-file=my.cnf", NULL};Int num_elements = (sizeof(server_options) / sizeof(char *)) - 1;static char *server_groups[] = {"libmysqld_server", "libmysqld_client", NULL};Int main(void) {mysql_library_init(num_elements, server_options, server_groups);mysql = mysql_init(NULL);mysql_options(mysql, MYSQL_READ_DEFAULT_GROUP, "libmysqld_client");mysql_options(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_library_end(); return 0; }

下面是编译上述程序的命令行:

GCC test1_libmysqldc -o test1_libmysqld \ ' /usr/local/mysql/bin/mysql_config——include——libmysqld-libs '

示例2

要尝试该示例,请创建一个test2_libmysqld与MySQL源目录处于同一级别的目录。保存test2_libmysqld.c来源和GNUmakefile,然后运行GNU使从内部test2_libmysqld目录中。

test2_libmysqld.c

/* *一个简单的客户端示例,使用嵌入式MySQL服务器库*/ #include < MySQL .h> #include  #include  #include  MySQL *db_connect(const char *dbname);db_disconnect(MYSQL *db)使用db_do_query查询MYSQL数据库const char *server_groups[] = {"test2_libmysqld_SERVER", "embedded", "server", NULL};int main(int argc, char **argv) {MYSQL * 1, * 2;/* mysql_library_init()必须在任何其他mysql *函数之前调用。* *你可以使用mysql_library_init(0, NULL, NULL),它*初始化服务器使用groups = {* "server", "embedded", NULL *}。* *在你的$HOME/.my.cnf文件中,你可能想要放:[test2_libmysqld_SERVER] language = /path/to/source/of/mysql/sql/share/english *当然,你可以在将argc和argv传递给这个函数之前修改它们。或者你可以用任何你喜欢的方式创建一个新的。但是argv中的所有参数(除了* argv[0],这是程序名)对于MySQL服务器都应该是有效的选项*。 * * If you link this client against the normal mysqlclient * library, this function is just a stub that does nothing. */ mysql_library_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); /* This must be called after all other mysql functions */ mysql_library_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"); /* * Notice that the client and server use separate group names. * This is critical, because the server does not accept the * client's options, and vice versa. */ 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

如果MySQL软件安装在/usr/local/mysql/include/ MySQL lib:= /usr/local/mysql/lib试试这个相反#公司:=(家)/ mysql - 5.7美元/包括#自由:=(家)/ mysql - 5.7美元/ libmysqld CC: = gcc CPPFLAGS: = - $ (inc) -D_THREAD_SAFE -D_REENTRANT CFLAGS: = - g - w - wall LDFLAGS: =静态#你可以改变-lmysqld -lmysqlclient使用#客户机/服务器库LDLIBS = - l $(自由)-lmysqld - lm ldl -lcrypt ifneq($(壳牌grep FreeBSD /版权2 > / dev / null)) # FreeBSD LDFLAGS + = pthread其他Linux LDLIBS + = #假设-lpthread endif #这是简单的一个文件测试程序来源:=$(通配符*.c) objects:= $(patsubst %c,%o,$(sources)) targets:= $(basename $(sources)) all: $(targets) clean: rm -f $(targets) $(objects) *.core