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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【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 


参考资料



相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
12天前
|
Ubuntu Linux Shell
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
(已成功解决)Linux环境报错—bash: wget: command not found;常见Linux发行版本,Linux中yum、rpm、apt-get、wget的区别;Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
168 68
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
|
9天前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
27天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
2月前
|
传感器 人工智能 物联网
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发,以及面临的挑战和未来趋势,旨在帮助读者深入了解并掌握这些关键技术。
51 6
|
2月前
|
存储 安全 物联网
C语言物联网开发之设备安全与代码可靠性隐患
物联网设备的C语言代码安全与可靠性至关重要。一是防范代码安全漏洞,包括缓冲区溢出和代码注入风险,通过使用安全函数和严格输入验证来预防。二是提高代码跨平台兼容性,利用`stdint.h`定义统一的数据类型,并通过硬件接口抽象与适配减少平台间的差异,确保程序稳定运行。
|
2月前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
51 1
|
2月前
|
NoSQL 编译器 C语言
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查、性能分析和符号调试。通过实践案例学习如何有效定位和解决问题,同时注意保持耐心、合理利用工具、记录过程并避免过度调试,以提高编程能力和开发效率。
51 1
|
2月前
|
传感器 存储 物联网
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点,广泛应用于嵌入式系统开发、通信协议实现及后端服务构建等领域,成为推动物联网技术进步的重要力量。
43 1
|
2月前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
50 2
|
2月前
|
存储 网络协议 物联网
C 语言物联网开发之网络通信与数据传输难题
本文探讨了C语言在物联网开发中遇到的网络通信与数据传输挑战,分析了常见问题并提出了优化策略,旨在提高数据传输效率和系统稳定性。