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

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
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
相关文章
|
10天前
|
存储 网络协议 Ubuntu
【Linux开发实战指南】基于UDP协议的即时聊天室:快速构建登陆、聊天与退出功能
UDP 是一种无连接的、不可靠的传输层协议,位于IP协议之上。它提供了最基本的数据传输服务,不保证数据包的顺序、可靠到达或无重复。与TCP(传输控制协议)相比,UDP具有较低的传输延迟,因为省去了建立连接和确认接收等过程,适用于对实时性要求较高、但能容忍一定数据丢失的场景,如在线视频、语音通话、DNS查询等。 链表 链表是一种动态数据结构,用于存储一系列元素(节点),每个节点包含数据字段和指向下一个节点的引用(指针)。链表分为单向链表、双向链表和循环链表等类型。与数组相比,链表在插入和删除操作上更为高效,因为它不需要移动元素,只需修改节点间的指针即可。但访问链表中的元素不如数组直接,通常需要从
|
2天前
|
Web App开发 缓存 Linux
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
《FFmpeg开发实战》书中第10章提及轻量级流媒体服务器MediaMTX,适合测试RTSP/RTMP协议,但不适合生产环境。推荐使用SRS或ZLMediaKit,其中SRS是国产开源实时视频服务器,支持多种流媒体协议。本文简述在华为欧拉系统上编译安装SRS和FFmpeg的步骤,包括安装依赖、下载源码、配置、编译以及启动SRS服务。此外,还展示了如何通过FFmpeg进行RTMP推流,并使用VLC播放器测试拉流。更多FFmpeg开发内容可参考相关书籍。
11 2
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
|
9天前
|
Linux
FFmpeg开发笔记(三十四)Linux环境给FFmpeg集成libsrt和librist
《FFmpeg开发实战》书中介绍了直播的RTSP和RTMP协议,以及新协议SRT和RIST。SRT是安全可靠传输协议,RIST是可靠的互联网流传输协议,两者于2017年发布。腾讯视频云采用SRT改善推流卡顿。以下是Linux环境下为FFmpeg集成libsrt和librist的步骤:下载安装源码,配置、编译和安装。要启用这些库,需重新配置FFmpeg,添加相关选项,然后编译和安装。成功后,通过`ffmpeg -version`检查版本信息以确认启用SRT和RIST支持。详细过程可参考书中相应章节。
16 1
FFmpeg开发笔记(三十四)Linux环境给FFmpeg集成libsrt和librist
|
10天前
|
SQL 自然语言处理 网络协议
【Linux开发实战指南】基于TCP、进程数据结构与SQL数据库:构建在线云词典系统(含注册、登录、查询、历史记录管理功能及源码分享)
TCP(Transmission Control Protocol)连接是互联网上最常用的一种面向连接、可靠的、基于字节流的传输层通信协议。建立TCP连接需要经过著名的“三次握手”过程: 1. SYN(同步序列编号):客户端发送一个SYN包给服务器,并进入SYN_SEND状态,等待服务器确认。 2. SYN-ACK:服务器收到SYN包后,回应一个SYN-ACK(SYN+ACKnowledgment)包,告诉客户端其接收到了请求,并同意建立连接,此时服务器进入SYN_RECV状态。 3. ACK(确认字符):客户端收到服务器的SYN-ACK包后,发送一个ACK包给服务器,确认收到了服务器的确
|
18天前
|
NoSQL 关系型数据库 MySQL
linux服务器重启php,nginx,redis,mysql命令
linux服务器重启php,nginx,redis,mysql命令
26 1
|
10天前
|
关系型数据库 MySQL Linux
Linux部署实战前言,MySQL在CentOS安装【单机软件】,MySQL的安装需要root权限,yum install mysql,systemctl enable mysqld开机自启的意思
Linux部署实战前言,MySQL在CentOS安装【单机软件】,MySQL的安装需要root权限,yum install mysql,systemctl enable mysqld开机自启的意思
|
10天前
|
运维 监控 大数据
部署-Linux01,后端开发,运维开发,大数据开发,测试开发,后端软件,大数据系统,运维监控,测试程序,网页服务都要在Linux中进行部署
部署-Linux01,后端开发,运维开发,大数据开发,测试开发,后端软件,大数据系统,运维监控,测试程序,网页服务都要在Linux中进行部署
|
14天前
|
NoSQL Linux 开发工具
【linux】在linux操作系统下快速熟悉开发环境并上手开发工具——体验不一样的开发之旅
【linux】在linux操作系统下快速熟悉开发环境并上手开发工具——体验不一样的开发之旅
|
18天前
|
移动开发 程序员 Linux
老程序员分享:linux驱动开发笔记_ioctl函数
老程序员分享:linux驱动开发笔记_ioctl函数
|
9天前
|
存储 关系型数据库 MySQL
探索MySQL:关系型数据库的基石
MySQL,作为全球最流行的开源关系型数据库管理系统(RDBMS)之一,广泛应用于各种Web应用、企业级应用和数据仓库中