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

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


参考资料



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
安全 关系型数据库 MySQL
Linux下安装mysql8.0(以tar.xz包安装--编译安装)
通过上述步骤,您完成了从下载、编译、安装到配置MySQL 8.0的全过程。此过程虽然较为复杂,但提供了对MySQL安装环境的完全控制,有助于满足特定的部署需求。在实际操作中,根据具体的系统环境,可能还需调整部分步骤或解决未预见的依赖问题。始终参考官方文档和社区资源,保持安装过程与最新版本的兼容性。
776 67
|
5天前
|
存储 安全 物联网
C语言物联网开发之设备安全与代码可靠性隐患
物联网设备的C语言代码安全与可靠性至关重要。一是防范代码安全漏洞,包括缓冲区溢出和代码注入风险,通过使用安全函数和严格输入验证来预防。二是提高代码跨平台兼容性,利用`stdint.h`定义统一的数据类型,并通过硬件接口抽象与适配减少平台间的差异,确保程序稳定运行。
|
15天前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
38 3
|
15天前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
29 3
|
25天前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
72 3
|
1月前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
1月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
92 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
1月前
|
Ubuntu 关系型数据库 MySQL
Linux系统MySQL安装
【10月更文挑战第19天】本文介绍了在 Linux 系统上安装 MySQL 的步骤,包括安装前准备、安装 MySQL、启动 MySQL 服务、配置 MySQL 以及验证安装。适用于 Ubuntu/Debian 和 CentOS/Fedora 系统,提供了详细的命令示例。
186 1
|
2月前
|
关系型数据库 MySQL Linux
Linux 安装 mysql 【使用 tar.gz | tar.xz安装包-离线安装】
在Linux系统中使用tar.xz压缩包安装MySQL数据库的详细步骤。包括下载MySQL压缩包,解压到指定目录,创建mysql用户和组,设置目录权限,初始化MySQL,配置my.cnf文件,启动服务,以及修改root用户密码。此外,还提供了如何设置Windows远程登录MySQL服务器的方法。
Linux 安装 mysql 【使用 tar.gz | tar.xz安装包-离线安装】
|
1月前
|
SQL 关系型数据库 MySQL
PHP与MySQL协同工作的艺术:开发高效动态网站
在这个后端技术迅速迭代的时代,PHP和MySQL的组合仍然是创建动态网站和应用的主流选择之一。本文将带领读者深入理解PHP后端逻辑与MySQL数据库之间的协同工作方式,包括数据的检索、插入、更新和删除操作。文章将通过一系列实用的示例和最佳实践,揭示如何充分利用这两种技术的优势,构建高效、安全且易于维护的动态网站。
下一篇
无影云桌面