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

  

 

 

 

posted on 2021-09-10 09:52  为何学习  阅读(210)  评论(0编辑  收藏  举报