************************************************************************************
【环境准备】
对于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系列函数簇。
【实战】
#include "/usr/include/mysql/mysql.h"
#include <stdio.h>
#include <string.h>
int main(){
MYSQL mysql;
const char *host = "192.168.1.201"; // mysql所在服务器IP地址
const char *user = "user157"; // 登录的用户名
const char *passwd = "user123"; // 登录密码
const char *database = "mydbtest"; // 指定操作的数据库
unsigned int port = 0; // 默认填0
const char *unix_socket = NULL; // 默认填NULL
unsigned long clientflag= 0; // 默认填0
// 初始化MYSQL对象
mysql_init(&mysql);
// 连接到远程数据库
if( NULL == (mysql_real_connect(&mysql, host, user, passwd, database, port, unix_socket, clientflag))){
printf("mysql_real_connect failed. errocde:%u :%s\n", mysql_errno(&mysql), mysql_error(&mysql));
return -1;
}
printf("%s mysql connection success.\n", host);
// 准备mysql指令
const char *table_name = "test_tab1";
char mysql_cmd[100] = {0};
sprintf(mysql_cmd, "select * from %s;", table_name);
// 执行mysql查询表内容指令: select * from test_tab1;
mysql_query(&mysql, mysql_cmd);
// 获取数据库存储结果
MYSQL_RES *res = mysql_store_result(&mysql);
// 获取查询的记录条数
unsigned int row_num = mysql_num_rows(res);
printf("row num: %d.\n", row_num);
// 操作完成后,执行下一条指令前要清理结果集
mysql_free_result(res);
// 插入一条数据(最大id+1, aaaaa)
sprintf(mysql_cmd, "insert into %s values (%d, \'aaaaa\');", table_name, row_num + 1);
mysql_query(&mysql, mysql_cmd);
mysql_free_result(res);
/******************** 将表输出打印 ********************/
// 1.获取表头类型个数
int type_num = mysql_num_fields(res);
printf("type num: %d\n", type_num);
// 2.获取列名(id, name, ....)
MYSQL_FIELD *fd;
char asz_flds[25][25] = {0};
int i = 0;
// 当获取到的 fd 为NULL时,退出循环(mysql_fetch_field()函数会自动顺延)
for(i = 0; fd = mysql_fetch_field(res); i++){
printf("fd->name: %s\n", fd->name);
strcpy(asz_flds[i], fd->name);
}
// 3.打印表头
for(i = 0; i < type_num; i++){
printf("%s\t", asz_flds[i]);
}
printf("\n");
// 4.打印每一条记录
MYSQL_ROW row;
while(row = mysql_fetch_row(res)){
for(int j = 0; j < type_num; j++){
printf("%s\t", row[j]);
}
printf("\n");
}
/************************************************************/
// 关闭连接
mysql_close(&mysql);
}
然后编译时需要链接mysql库:
gcc main.c -lmysqlclient