Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux c语言连接MySQL数据库实例

Linux c语言连接MySQL数据库实例

作者头像
typecodes
发布于 2024-03-29 06:27:27
发布于 2024-03-29 06:27:27
64200
代码可运行
举报
文章被收录于专栏:typecodestypecodes
运行总次数:0
代码可运行

工作上自己在Linux C/C++开发时,用的都是Oracle数据库,毕竟企业级应用追求稳定性好、安全可靠。业余时间做了一些WEB开发,接触到MySQL数据库比较多,也比较喜欢开源的MySQL。之前都是用PHP连接MySQL数据库,这里自己用C语言连接MySQL,执行一些简单的连接、查询操作、异常处理等操作。

1 测试程序

代码比较简单,先把MySQL数据库安装后得到的头文件mysql.h包含进来,然后编译时需要用到MySQL对外提供的API接口。查阅了下MySQL官方文档,MySQL对C语言提供了一个静态库libmysqlclient.a和一个动态库libmysqlclient.so接口文件,本文选择使用动态库libmysqlclient.so。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111

/** * @FileName linux_c_mysql.c * @Describe A simple example for operating mysql using c programming in linux system. * @Author vfhky 2015.12.29 15:40 https://typecodes.com/cseries/linuxgccgconnectmysql.html * @Compile gcc -I/usr/local/mysql/include -L/usr/local/mysql/lib -lmysqlclient linux_c_mysql.c -o linux_c_mysql * @Reference http://dev.mysql.com/doc/refman/5.7/en/c-api-function-overview.html */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <mysql.h> //MySQL connection. MYSQL *pMysqlConn; //result set. MYSQL_RES *pMysqlRes; //an instance of a row from the result. MYSQL_ROW MysqlRow; #define MAX_BUF_SIZE 1024 const char *pHostName = "localhost"; //or set the remote ip address. const char *pUserName = "root"; const char *pPassword = "password"; const char *pDbName = "typecodes"; //database name of my typecho blog. const unsigned int iDbPort = 3306; /* print the last error message. */ void finish_with_error(const char *msg) { if( msg ) printf("Error message%s: %s.\n", msg, mysql_error(pMysqlConn) ); else printf( "Error message%s.\n", mysql_error(pMysqlConn) ); mysql_close(pMysqlConn); /** * When errors such as MySQL server has gone away hapended, the program should be end immeidately. * Otherwise, we should encounter the error below. * *** Error in `./linux_c_mysql': double free or corruption (!prev): 0x0000000001223560 *** */ exit(-1); } /** * mysql_query() cannot be used for statements that contain binary data; you must use mysql_real_query() instead. * Binary data may contain the “\0” character, which mysql_query() interprets as the end of the statement string. * In addition, mysql_real_query() is faster than mysql_query() because it does not call strlen() on the statement string. */ int executesql( const char * sql ) { if( mysql_real_query( pMysqlConn, sql, strlen(sql) ) ) return -1; return 0; } /* init the mysql connection. */ int init_mysql() { pMysqlConn = mysql_init(NULL); if( pMysqlConn == NULL ) return -1; if( !mysql_real_connect( pMysqlConn, pHostName, pUserName, pPassword, pDbName, iDbPort, NULL, 0 ) ) return -2; //set the language for the results excuted. if( executesql("set names utf8") ) return -3; return 0; } int main( int argc, char ** argv ) { int x=0, i=0; printf( "A example for connecting mysql using c program in linux.\n" ); if( init_mysql() ) finish_with_error(NULL); char cSqlDataMAX_BUF_SIZE = {0x00}; memcpy( cSqlData, "SELECT * FROM typecodes_users", strlen("SELECT * FROM vfhkytpvfhky_users") ); if( executesql( cSqlData ) ) finish_with_error(NULL); //pMysqlRes = mysql_use_result(pMysqlConn); pMysqlRes = mysql_store_result(pMysqlConn); int iNum_rows = mysql_num_rows(pMysqlRes); int iNum_fields = mysql_num_fields(pMysqlRes); printf( "Table have %d records containing %d fields in each one.\n", iNum_rows, iNum_fields ); printf( "+------------------------------------------------+\n" ); while( ( MysqlRow = mysql_fetch_row(pMysqlRes) ) ) { i = 0; while( i < iNum_fields ) { printf( "| %s", MysqlRowi?MysqlRowi : "NULL" ); x = strlen(MysqlRowi++); for( ; x < 21; x++ ) printf(" "); } printf("|\n"); } printf( "+------------------------------------------------+\n" ); mysql_free_result(pMysqlRes); mysql_close(pMysqlConn); return 0; } |

2 gcc编译方法

由于之前在搭建MySQL服务的时候,已经把MySQL的动态库路径通过ldconfig命令添加到了Linux系统动态库搜索路径当中了,所以这里直接生成可执行文件就行了。当然,还可以像上一篇文章中的其它3种操作方法,把MySQL动态库mysqlclient.so链接进来最终生成可执行文件。

用下面这条命令编译即可,其中-I参数表示MySQL数据库头文件路径,-L参数表示MySQL数据库的动态库路径。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@typecodes ~]# gcc -I/usr/local/mysql/include  -L/usr/local/mysql/lib -lmysqlclient  linux_c_mysql.c -o linux_c_mysql
[root@typecodes ~]# ldd linux_c_mysql
ldd命令查看可执行文件所依赖的动态库
ldd命令查看可执行文件所依赖的动态库
3 执行结果

下图是程序执行获取的之前Typecho博客数据库typecodes中的用户表typecodes_users中的数据:

ldd命令查看可执行文件所依赖的动态库
ldd命令查看可执行文件所依赖的动态库
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-01-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【在线五子棋对战】四、MySQL API 使用
​ 众所周知,MySQL 数据库是一个典型的 C/S 结构,即:客户端和服务器端。如果我们部署好了 MySQL 服务器,想要在客户端访问服务器端的数据,在编写程序的时候就可以通过官方提供的 C 语言的 API 来实现,因为我们总不能说在程序中开个子进程去使用 SQL 语句是吧,所以直接通过 API 来调用是最省事的!
利刃大大
2025/06/11
870
Linux——MySQL用户管理与链接
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。
有礼貌的灰绅士
2025/05/18
860
Linux——MySQL用户管理与链接
论一人做项目的压力与收获
大家好,终于到了周末,有时间来做个总结,来跟大家一起来分享与学习,最近一直在做项目,除此之外,做点其他事情,并没有时间去分享公众号文章。今天主要来谈谈一人做项目的压力与收获以及从一个项目中如何去学习以及有什么样的压力的问题。
公众号guangcity
2019/09/20
8850
论一人做项目的压力与收获
Mysql数据库学习(四):常用Mysql C API 介绍和使用、封装一个访问Mysql数据库的类MysqlDB
s1mba
2017/12/28
2.7K0
Mysql数据库学习(四):常用Mysql C API 介绍和使用、封装一个访问Mysql数据库的类MysqlDB
C++ 之 VS2010 和MySQL数据库的链接问题
if (0 == mysql_library_init(0, NULL, NULL)) {
恒辉信达
2024/11/22
1420
C/C++链接数据库(MySQL)(超级详细)
MySQL :: MySQL 8.0 C API Developer Guide :: 5.4.41 mysql_init()
ljw695
2025/01/03
5980
C/C++链接数据库(MySQL)(超级详细)
linux下mysql函数的详细案列
1 MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host, 2 const char *user, 3 const char *passwd, 4 unsigned i
Gxjun
2018/03/26
3.2K0
MySQL见闻录 - 入门之旅(六)(C++操作MySQL)
我也是个新手,所以这个整理的可能会比较杂,蛮看,等入门之后在拿个小项目练一下就熟悉了。
看、未来
2020/08/25
1.9K0
实现一个简单的 mysql 工具
无论在 windows 下还是 linux 下,我们每次去连接 mysql 的时候都会运行一个叫做 mysql 的命令,本文就模仿制作一个类似的程序,实现可以在里面执行 DML 和 DQL 语句。具体代码的实现请参考程序。
我与梦想有个约会
2023/10/20
2540
实现一个简单的 mysql 工具
Linux下C语言操作MySQL
MySQL是一个开源码的小型关系数据库管理系统,体积小,速度快,总体成本低,开源。MySQL有以下特性:
程序手艺人
2019/02/21
6.3K0
2015博客升级记(四):CentOS 7.1编译安装MySQL5.7.7rc
这是《2015年博客升级记》系列文章的第四篇,主要记录在Linux系统中如何编译安装MySql数据库。
typecodes
2024/03/29
1510
2015博客升级记(四):CentOS 7.1编译安装MySQL5.7.7rc
VS 环境使用MySQL Connector C 6.1 连接数据库
下载MySQL Connector/C,根据你的系统版本选择下载ZIP ARCHIVE,下载链接
全栈程序员站长
2022/09/14
2.6K0
mysql 连接池的实现
涉及后端的数据交互管理的时候,我们在应用层总是希望将一些过程进行封装进行规模化管理,池化技术基本就是来干这种事情的,线程池,内存池,连接池,请求池等等都是来干这种事情的,当然如果从算法层面来说,这种就是用空间来换时间的做法。我们的很多著名的算法也是基于这样的方式来优化的,著名的 KMP 算法,通过维护一个 next 数组,来降低算法的时间复杂度。
ge3m0r
2024/05/26
2520
C中Mysql的基本api接口
这些基本的使用方式和注意事项可以帮助你有效地使用 mysql_query 来执行数据库操作。
薄荷冰
2024/05/26
2100
Linux gcc编译生成静态库和共享动态库的过程
这篇文章主要通过实例演示在Linux下如何使用gcc分别编译生成静态库和动态库文件以及其它程序如何使用这个生成的静态库和动态库。
typecodes
2024/03/29
9570
Linux gcc编译生成静态库和共享动态库的过程
【Linux】Ubuntu下C语言访问MySQL数据库入门
首先以用户rick登录MySQL数据库(用户rick已经被root权限用户赋予了创建数据库等等的权限):
bear_fish
2018/09/14
8.4K0
【Linux】Ubuntu下C语言访问MySQL数据库入门
C++利用MSQL API连接和操作数据库
在Windows平台,我们可以使用ADO、ODBC或者MySQL API进行连接和操作。ADO (ActiveX Data Objects,ActiveX数据对象)是Microsoft提出的一个用于存取数据源的COM组件。它提供了程序语言和统一数据访问方式OLE DB的一个中间层,也就是Microsoft提出的应用程序接口(API)用以实现访问关系或非关系数据库中的数据。
恋喵大鲤鱼
2018/08/03
2K0
C++利用MSQL API连接和操作数据库
mysql基本操作以及python控制mysql(1)–环境安装
学习了虫师的博文,最近准备将人脸识别器提升到网站阅读签到信息的状态。所以打算将识别器获取的签到信息再放到数据库中,so。。加油么么哒。。
十四君
2019/11/23
7710
C语言调用mysql的存储过程
下面假设有一张sc表,保存学生选课记录,有课程号,学号,平时分,卷面分,总分。 建立数据库表过程: create table class( cno varchar(8) not null, sno varchar(8) not null, ordinary_score int, last_score int, all_score int );
艳艳代码杂货店
2021/10/27
2.9K0
MySQL见闻录 - 入门之旅
相比于5代版本,这款跨越6、7代版本的8代版本有许多的好评,当然我也没体验过5代版本,反正要用就用最新的嘛。
看、未来
2020/09/29
8680
MySQL见闻录 - 入门之旅
相关推荐
【在线五子棋对战】四、MySQL API 使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验