mysql客户端使用libmysqlclient库的内部函数去访问mysql服务器,因此使用函数库中的API过程中,要指明链接到函数库和头文件。
在Linux系统中可通过命令
locate mysqlclient.a locate mysql.h
找到文件的路径。
在数据库编程中常用的API函数
//1、初始化与mysql_real_connect()相适应的MYSQL 对象,成功返回MYSQL *句柄,失败返回NULL MYSQL*mysql=mysql_init(NULL);
//2、链接到数据库 MYSQL*mysql_real_connect(MYSQL *mysql,const char *host,const char *user,
const char *pwd,const char*db,unsigned int port,
const char *unix_socket,unsighed long client_flag);
参数1是初始返回值;
参数2是IP;
参数3MySQL用户名;
参数4密码;
参数5数据库名;
参数6端口;
参数unix_socket指明应该使用的套接字或者管道,没有填NULL;
参数client_flag 一般情况下填0;
成功返回连接句柄,失败返回NULL;
//3、执行sql语句 成功返回0.失败返回非0 int mysql_query(MYSQL*mysql,const char *query);
//4、获取结果集,成功返回MYSQL_RES结果集指针,失败返回NULL MYSQL_RES *mysql_store_result(MYSQL*conn);
//5、解析结果集 获取每一行的数据 MYSQL_ROW *mysql_fetch_row(MYSQL_RES*);
//6、释放结果集 void mysql_free_result(MYSQL_RES* result)
//7、释放资源 mysql_close(MYSQL*mysql);
完整demo如下:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include"mysql.h" 4 int main() 5 { 6 7 MYSQL*mysql=mysql_init(NULL); 8 if(mysql==NULL) 9 { 10 printf("mysql_init error\n"); 11 } 12 else 13 printf("success\n"); 14 //连接mysql数据库 15 MYSQL*conn=mysql_real_connect(mysql,"127.0.0.1","root","123","db1",0,NULL,0); 16 if(conn==NULL) 17 { 18 printf("mysql error [%s]\n",mysql_error(mysql)); 19 } 20 printf("mysql conn success\n"); 21 //执行sql语句 22 char *pSQL ="select * from user"; 23 int ret = mysql_query(conn,pSQL); 24 if(ret!=0) 25 { 26 printf("query error [%s]\n",mysql_error(mysql)); 27 } 28 //获取查询结果集 29 MYSQL_RES *results = mysql_store_result(conn); 30 if(results==NULL) 31 { 32 printf("mysql_store_result error [%s]\n",mysql_error(mysql)); 33 } 34 //循环获取每条记录 35 MYSQL_ROW row; 36 while(row=mysql_fetch_row(results)) 37 { 38 printf("%s %s\n",row[0],row[1]); //一条记录有多个字段,本例有两个 39 } 40 mysql_close(mysql); 41 return 0; 42 }
Makefile
1 src = $(wildcard *.c) 2 target = $(patsubst %.c, %, $(src)) 3 inc_path = /usr/include/mysql/ 4 lib_path= /usr/lib/x86_64-linux-gnu/ 5 all:$(target) 6 %:%.c 7 gcc $< -o $@ -I $(inc_path) -L $(lib_path) -lmysqlclient 8 clean: 9 -rm -rf $(target) 10 .PHONY: 11 all clean