mysql api的简单例子。这个里面没有包括查询的API,因为mysql有两套查询api。
- /**********************************************************************************
-
* File name:mysql_api_examples.c
-
* Description:mysql api examples
-
* Author:Wales.guo
-
* Date:2011-11-22
-
* Revision History:
-
***********************************************************************************/
-
#include <stdlib.h>
-
#include <stdio.h>
-
#include <string.h>
-
-
#include <mysql.h>
-
-
int main(int argc,char *argv[])
-
{
-
MYSQL *mysql = NULL;
-
unsigned long client_flag = CLIENT_COMPRESS | CLIENT_SSL;
-
-
unsigned long client_version = 0;
-
unsigned long server_version = 0;
-
char *server_stat = NULL;
-
-
int ret = EXIT_SUCCESS;
-
-
client_version = mysql_get_client_version();
-
if(client_version < 50100) {
-
fprintf(stderr, "mysql client library version is too low.\n");
-
ret = EXIT_FAILURE;
-
goto END;
-
}
-
-
#ifdef MYSQL_EMBEDDED
-
/*
-
* 英文文档里面写的是mysql_library_init
-
* 中文文档里面写的是mysql_server_init
-
* 最终发现这个:
-
*
-
* mysql_library_init()和mysql_library_end()实际上
-
* 是#define符号,这类符号使得它们
-
* 等效于mysql_server_init()和mysql_server_end(),
-
* 但其名称更清楚地指明,无论应
-
* 用程序使用的是mysqlclient或mysqld库,
-
* 启动或结束MySQL库时,应调用它们。
-
* 对于早期的MySQL版本,可调用
-
* mysql_server_init()和mysql_server_end()取而代之。
-
*/
-
ret = mysql_server_init(0, NULL, NULL);
-
if (ret != 0) {
-
fprintf(stderr, "could not initialize MySQL library\n");
-
ret = EXIT_FAILURE;
-
goto END;
-
}
-
#endif
-
mysql = mysql_init(NULL);
-
if (mysql == NULL) {
-
fprintf(stderr, "could not initialize MySQL\n");
-
ret = EXIT_FAILURE;
-
goto EMBEDDED_END;
-
}
-
-
ret = mysql_ssl_set(mysql, NULL, NULL, NULL, NULL, NULL);
-
if (ret != 0) {
-
printf("call mysql_ssl_set error.error = %s\n",mysql_error(pMySQL));
-
ret = EXIT_FAILURE;
-
goto EMBEDDED_END;
-
}
-
-
if (mysql_real_connect(mysql, "host", "user", "passwd", "mysql", port, NULL, client_flag)) {
-
fprintf(stderr, "failed to connect to database: Error: %s\n", mysql_error(mysql));
-
ret = EXIT_FAILURE;
-
goto MYSQL_END;
-
}
-
-
#ifdef MYSQL_EMBEDDED
-
mysql_options(mysql, MYSQL_READ_DEFAULT_GROUP, "libmysqld_client");
-
mysql_options(mysql, MYSQL_OPT_USE_EMBEDDED_CONNECTION, NULL);
-
#endif
-
-
ret = mysql_set_character_set(mysql, "utf8");
-
if (ret != 0) {
-
fprintf(stderr, "could not set character set. Error: %s\n",mysql_error(mysql));
-
ret = EXIT_FAILURE;
-
goto MYSQL_END;
-
}
-
-
mysql_set_server_option(mysql, MYSQL_OPTION_MULTI_STATEMENTS_ON);
-
-
ret = mysql_change_user(mysql, "root", "root123", NULL);
-
if (ret != 0) {
-
fprintf(stderr, "failed to change user. Error: %s\n", mysql_error(mysql));
-
ret = EXIT_FAILURE;
-
goto MYSQL_END;
-
}
-
-
server_version = mysql_get_server_version(mysql);
-
if (server_version < 50100) {
-
fprintf(stderr, "mysql server version is too low.\n");
-
ret = EXIT_FAILURE;
-
goto MYSQL_END;
-
}
-
-
ret = mysql_create_db(mysql, "my_database");
-
if (ret != 0) {
-
fprintf(stderr, "failed to create new database. Error: %s\n", mysql_error(mysql));
-
ret = EXIT_FAILURE;
-
goto MYSQL_END;
-
}
-
-
ret = mysql_select_db(mysql, "my_database");
-
if (ret != 0) {
-
fprintf(stderr, "failed to select database. Error: %s\n", mysql_error(mysql));
-
ret = EXIT_FAILURE;
-
goto DROP_DB_END;
-
}
-
-
ret = mysql_autocommit(mysql, 0);
-
if (ret != 0) {
-
fprintf(stderr, "failed to select database. Error: %s\n", mysql_error(mysql));
-
ret = EXIT_FAILURE;
-
goto DROP_DB_END;
-
}
-
/*
-
* 这里调用查询API,但是这里有两套API可以调用
-
* 下一遍介绍中会看到: 普通查询API和预处理API
-
*/
-
ret = mysql_commit(mysql);
-
if (ret != 0) {
-
fprintf(stderr, "failed to commit. Error: %s\n", mysql_error(mysql));
-
ret = EXIT_FAILURE;
-
goto ROLL_BACK_END;
-
}
-
-
server_stat = mysql_stat(mysql);
-
if (server_stat != NULL) {
-
printf("%s",server_stat);
-
} else {
-
printf("%s","cannot get mysql server status. Error: %s\n", mysql_error(mysql));
-
}
-
goto DROP_DB_END;
-
-
ROLL_BACK_END:
-
ret = mysql_rollback(mysql);
-
if (ret != 0) {
-
fprintf(stderr, "failed to roll back. Error: %s\n", mysql_error(mysql));
-
ret = EXIT_FAILURE;
-
}
-
-
DROP_DB_END:
-
ret = mysql_drop_db(mysql, "my_database");
-
if (ret != 0) {
-
fprintf(stderr, "failed to select database. Error: %s\n", mysql_error(mysql));
-
ret = EXIT_FAILURE;
-
goto MYSQL_END;
-
}
-
-
MYSQL_END:
-
if (mysql != NULL) {
-
mysql_close(mysql);
-
mysql = NULL;
-
}
-
-
EMBEDDED_END:
-
#ifdef MYSQL_EMBEDDED
-
mysql_server_end();
-
#endif
-
-
END:
-
return ret;
-
}
以上代码在linux下使用:
- gcc mysql_api_examples.c -DMYSQL_EMBEDDED -o test1_libmysqld -lz \
-
`/usr/local/mysql/bin/mysql_config --include --libmysqld-libs`
进行编译。
这里简单的组织出mysql api中非查询所用的函数,以及他们的调用顺序。一下简要介绍函数:
---------------------------------------------------------------------------------------------
- int mysql_library_init(int argc, char **argv, char **groups);
-
void mysql_library_end(void);
像sqlite,leveldb一样,mysql所支持的内嵌式数据库的两个函数。
参照:
http://dev.mysql.com/doc/refman/5.1/en/libmysqld.html---------------------------------------------------------------------------------------------
- MYSQL *mysql_init(MYSQL *mysql);
-
void mysql_close(MYSQL *mysql);
mysql库的初始化函数
参照:
http://dev.mysql.com/doc/refman/5.1/zh/apis.html#mysql-init---------------------------------------------------------------------------------------------
- int mysql_ssl_set(MYSQL *mysql, const char *key, const char *cert, const char *ca, const char *capath, const char *cipher);
使用mysql_ssl_set(),可采用SSL建立安全连接。必须在mysql_real_connect()之前调用它。
除非在客户端库中允许了OpenSSL支持,否则mysql_ssl_set()不作任何事。
参照:
http://dev.mysql.com/doc/refman/5.1/zh/apis.html#mysql-ssl-set---------------------------------------------------------------------------------------------
- MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)
连接mysql数据库。
mysql_connect处于废弃状态,建议不要使用。
参照:
http://dev.mysql.com/doc/refman/5.1/zh/apis.html#mysql-real-connect---------------------------------------------------------------------------------------------
- int mysql_options(MYSQL *mysql, enum mysql_option option, const void *arg)
参照:
http://dev.mysql.com/doc/refman/5.1/en/mysql-options.html---------------------------------------------------------------------------------------------
- int mysql_set_character_set(MYSQL *mysql, char *csname);
设置该连接的字符集。
参照:
http://dev.mysql.com/doc/refman/5.1/zh/apis.html#mysql-set-character-set
另:和字符集相关的函数还有:
- const char *mysql_character_set_name(MYSQL *mysql);
为当前连接返回默认的字符集。
- void mysql_get_character_set_info(MYSQL *mysql, MY_CHARSET_INFO *cs)
该函数提供了关于默认客户端字符集的信息。
- int mysql_options(MYSQL *mysql, enum mysql_option option, const char *arg)
设置关于字符集的参数:MYSQL_SET_CHARSET_DIR和MYSQL_SET_CHARSET_NAME
- unsigned long mysql_real_escape_string(MYSQL *mysql, char *to, const char *from, unsigned long length)
该函数用于创建可在SQL语句中使用的合法SQL字符串。
---------------------------------------------------------------------------------------------
- unsigned long mysql_get_client_version(void)
返回表示客户端库版本的整数。该值的格式是XYYZZ,其中X是主版本号,YY是发布级别,ZZ是发布级别内的版本号。例如,值40102表示客户端库的版本是4.1.2。
参照:
http://dev.mysql.com/doc/refman/5.1/zh/apis.html#mysql-get-client-version- char *mysql_get_server_info(MYSQL *mysql)
返回代表服务器版本号的字符串。
参照:
http://dev.mysql.com/doc/refman/5.1/zh/apis.html#mysql-get-server-info---------------------------------------------------------------------------------------------
- my_bool mysql_change_user(MYSQL *mysql, const char *user, const char *password, const char *db)
更改用户,并使由db指定的数据库成为由mysql指定的连接上的默认数据库(当前数据库)。
参照:
http://dev.mysql.com/doc/refman/5.1/zh/apis.html#mysql-get-server-info---------------------------------------------------------------------------------------------
- int mysql_create_db(MYSQL *mysql, const char *db)
创建由db参数命名的数据库。该函数已过时。最好使用mysql_query()来发出SQL CREATE DATABASE语句。
参照:
http://dev.mysql.com/doc/refman/5.1/zh/apis.html#mysql-get-server-info- int mysql_drop_db(MYSQL *mysql, const char *db)
撤销由db参数命名数据库。该函数已过时。最好使用mysql_query()来发出SQL DROP DATABASE语句
参照:
http://dev.mysql.com/doc/refman/5.1/zh/apis.html#mysql-drop-db- int mysql_select_db(MYSQL *mysql, const char *db)
使由db指定的数据库成为由mysql指定的连接上的默认数据库(当前数据库)。
参照:
http://dev.mysql.com/doc/refman/5.1/zh/apis.html#mysql-select-db---------------------------------------------------------------------------------------------
- my_bool mysql_autocommit(MYSQL *mysql, my_bool mode)
-
my_bool mysql_commit(MYSQL *mysql)
-
my_bool mysql_rollback(MYSQL *mysql)
实务操作的三个函数。
参照:
http://dev.mysql.com/doc/refman/5.1/zh/apis.html#mysql-rollbac
阅读(2211) | 评论(0) | 转发(0) |