MYSQL-C语言操作
************************************************************************************
【环境准备】
对于C语言的实操,mysql提供了一个头文件 "mysql.h";
获得这个头文件,需要安装libmysqlclient-dev:
[linux-shell]$ sudo apt install libmysqlclient-dev
安装完成后,可以使用find命令查找到mysql.h的路径,以便于include它:
[linux-shell]$ sudo find / -name mysql.h
查询结果: /usr/include/mysql/mysql.h
在C程序中包含此头文件即可调用mysql系列函数簇。
【实战】
1 #include "/usr/include/mysql/mysql.h" 2 #include <stdio.h> 3 #include <string.h> 4 5 int main(){ 6 MYSQL mysql; 7 const char *host = "192.168.1.201"; // mysql所在服务器IP地址 8 const char *user = "user157"; // 登录的用户名 9 const char *passwd = "user123"; // 登录密码 10 const char *database = "mydbtest"; // 指定操作的数据库 11 unsigned int port = 0; // 默认填0 12 const char *unix_socket = NULL; // 默认填NULL 13 unsigned long clientflag= 0; // 默认填0 14 15 // 初始化MYSQL对象 16 mysql_init(&mysql); 17 18 // 连接到远程数据库 19 if( NULL == (mysql_real_connect(&mysql, host, user, passwd, database, port, unix_socket, clientflag))){ 20 printf("mysql_real_connect failed. errocde:%u :%s\n", mysql_errno(&mysql), mysql_error(&mysql)); 21 return -1; 22 } 23 printf("%s mysql connection success.\n", host); 24 25 // 准备mysql指令 26 const char *table_name = "test_tab1"; 27 char mysql_cmd[100] = {0}; 28 sprintf(mysql_cmd, "select * from %s;", table_name); 29 // 执行mysql查询表内容指令: select * from test_tab1; 30 mysql_query(&mysql, mysql_cmd); 31 32 // 获取数据库存储结果 33 MYSQL_RES *res = mysql_store_result(&mysql); 34 // 获取查询的记录条数 35 unsigned int row_num = mysql_num_rows(res); 36 printf("row num: %d.\n", row_num); 37 // 操作完成后,执行下一条指令前要清理结果集 38 mysql_free_result(res); 39 40 // 插入一条数据(最大id+1, aaaaa) 41 sprintf(mysql_cmd, "insert into %s values (%d, \'aaaaa\');", table_name, row_num + 1); 42 mysql_query(&mysql, mysql_cmd); 43 mysql_free_result(res); 44 45 /******************** 将表输出打印 ********************/ 46 // 1.获取表头类型个数 47 int type_num = mysql_num_fields(res); 48 printf("type num: %d\n", type_num); 49 50 // 2.获取列名(id, name, ....) 51 MYSQL_FIELD *fd; 52 char asz_flds[25][25] = {0}; 53 int i = 0; 54 // 当获取到的 fd 为NULL时,退出循环(mysql_fetch_field()函数会自动顺延) 55 for(i = 0; fd = mysql_fetch_field(res); i++){ 56 printf("fd->name: %s\n", fd->name); 57 strcpy(asz_flds[i], fd->name); 58 } 59 60 // 3.打印表头 61 for(i = 0; i < type_num; i++){ 62 printf("%s\t", asz_flds[i]); 63 } 64 printf("\n"); 65 66 // 4.打印每一条记录 67 MYSQL_ROW row; 68 while(row = mysql_fetch_row(res)){ 69 for(int j = 0; j < type_num; j++){ 70 printf("%s\t", row[j]); 71 } 72 printf("\n"); 73 } 74 /************************************************************/ 75 76 // 关闭连接 77 mysql_close(&mysql); 78 }
然后编译时需要链接mysql库:
gcc main.c -lmysqlclient