【Linux环境】【C语言开发】【mysql】Linux环境下C语言操作mysql

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【Linux环境】【C语言开发】【mysql】Linux环境下C语言操作mysql

准备工作


  • 参考资料中《安装基础MySQL环境》;


两个要点


  • 头文件包含(解决编译问题)


#include <mysql/mysql.h>


包含该文件,需要提前安装mysql-devel包;


  • 动态库链接(解决链接问题)


/usr/lib64/mysql/libmysqlclient.so


需要在gcc或makefile中指定该so的路径;


主要api接口


- MYSQL *mysql_init(MYSQL *mysql);
- 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);
- int mysql_real_query(MYSQL *mysql, const char *query, unsigned long length);
- MYSQL_RES *mysql_store_result(MYSQL *mysql)
- MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
- unsigned int mysql_num_fields(MYSQL_RES *result);
- void mysql_close(MYSQL *mysql);
- void mysql_free_result(MYSQL_RES *result);


demo测试代码及编译命令


  • demo版测试代码如下:


 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <mysql/mysql.h>
 #define MAX_BUF_SIZE 2018 
 MYSQL *g_conn; 
 MYSQL_RES *g_res; 
 MYSQL_ROW g_row;
 const char *g_host_name = "localhost";
 const char *g_user_name = "root";
 const char *g_password = "Cyg26032583.";
 const char *g_db_name = "qxhgdfirstdb";
 const unsigned int g_db_port = 3306;
 void print_mysql_error(const char *msg) {
     if (msg)
         printf("%s: %s\n", msg, mysql_error(g_conn));
     else
         puts(mysql_error(g_conn));
 }
 int execute_mysql(const char * sql) {
     if (mysql_real_query(g_conn, sql, strlen(sql))) 
         return -1; 
     return 0; 
 }
 int init_mysql() { 
     g_conn = mysql_init(NULL);
     if(!mysql_real_connect(g_conn, g_host_name, g_user_name, g_password, g_db_name, g_db_port, NULL, 0)) 
         return -1;
     if (execute_mysql("set names utf8")) 
         return -1;
     return 0; 
 }
 int main(void) {
     int iNum_rows;
     int iNum_fields;
     if (init_mysql());
         print_mysql_error(NULL);
     if (execute_mysql("insert into employeelst values(2,'chunmei'); "))
         print_mysql_error(NULL);
     if (execute_mysql("SELECT * FROM employeelst;")) 
         print_mysql_error(NULL);
     g_res = mysql_store_result(g_conn); 
     iNum_rows   = mysql_num_rows(g_res); 
     iNum_fields = mysql_num_fields(g_res); 
     printf("total %d records,each record %d datafields as follows:\n", iNum_rows, iNum_fields);
     printf("id\tname\n");
     while ((g_row = mysql_fetch_row(g_res))) 
         printf("%s\t%s\n", g_row[0], g_row[1]); 
     mysql_free_result(g_res); 
     mysql_close(g_conn); 
     return 0;
 }


  • 编译命令如下所示:


gcc mysql_test.c -L /usr/lib64/mysql -lmysqlclient


  • 测试输出如下:


[qxhgd@localhost mysql]$ gcc mysql_test.c -L /usr/lib64/mysql -lmysqlclient;./a.out
total 15 records,each record 2 datafields as follows:
id      name
1       秋香
9527    华安
2       chunmei


遇到问题及解决方式


  • 问题1、fatal error: mysql/mysql.h: No such file or directory


## 编译报错打印
mysql_test.c:15:26: fatal error: mysql/mysql.h: No such file or directory
  #include <mysql/mysql.h>
                          ^
compilation terminated.
## 解决方案
yum install mysql-devel 


  • 问题2、cannot find -lmysqlclient


## 编译报错打印
/usr/bin/ld: cannot find -lmysqlclient
collect2: error: ld returned 1 exit status
## 解决方案
gcc mysql_test.c -L /usr/lib64/mysql -lmysqlclient 


参考资料



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
12天前
|
Web App开发 搜索推荐 Unix
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
【10月更文挑战第21天】Linux系统之MobaXterm远程连接centos的GNOME桌面环境
112 4
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
|
6天前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
14 1
|
9天前
|
Linux UED iOS开发
|
14天前
|
Ubuntu 应用服务中间件 Linux
Linux下搭建Nginx环境的搭建
Linux下搭建Nginx环境的搭建
|
18天前
|
监控 Linux 云计算
Linux操作系统在云计算环境中的实践与优化###
【10月更文挑战第16天】 本文探讨了Linux操作系统在云计算环境中的应用实践,重点分析了其在稳定性、安全性和高效性方面的优势。通过具体案例,阐述了Linux如何支持虚拟化技术、实现资源高效分配以及与其他开源技术的无缝集成。文章还提供了针对Linux系统在云计算中的优化建议,包括内核参数调整、文件系统选择和性能监控工具的应用,旨在帮助读者更好地理解和应用Linux于云计算场景。 ###
21 3
|
26天前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
209 3
|
30天前
|
Oracle 关系型数据库 MySQL
Mysql(1)—简介及Windows环境下载安装
MySQL 是一个流行的关系型数据库管理系统(RDBMS),基于 SQL 进行操作。它由瑞典 MySQL AB 公司开发,后被 Sun Microsystems 收购,现为 Oracle 产品。MySQL 是最广泛使用的开源数据库之一,适用于 Web 应用程序、数据仓库和企业应用。
52 2
|
1月前
|
数据可视化 关系型数据库 MySQL
【IDEA】配置mysql环境并创建mysql数据库
【IDEA】配置mysql环境并创建mysql数据库
72 0
|
1月前
|
Unix Linux Go
Linux 使用Yum安装Go和配置环境
Linux 使用Yum安装Go和配置环境
|
1月前
|
Linux C语言 iOS开发
MacOS环境-手写操作系统-06-在mac下通过交叉编译:C语言结合汇编
MacOS环境-手写操作系统-06-在mac下通过交叉编译:C语言结合汇编
16 0