news 2026/6/15 16:16:01

MySQL用C/C++连接

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL用C/C++连接
  • 连接库下载
  • mysql接口介绍
  • workbench

连接库下载

  1. 要想用C语言连接mysql,我们需要从mysql官网下载mysql提供的连接库

    选择C API

然后选择MySQL Connector/C++ 8.0

最后挑选自己的配置即可。

  1. 如果我们一开始使用yum源安装的话,他已经自动帮我们安装了连接库了,无需手动安装。

  2. 我们还可以用apt包直接下载:

sudoaptupdatesudoaptinstalllibmysqlclient-dev

最后我们可以检测是否存在mysql.h:

zhangwho@VM-0-2-ubuntu:~$find/usr -name"mysql.h"/usr/include/mysql/mysql.h

mysql接口介绍

我们可以用官网获取详细的接口介绍。

那么我们先介绍一些简单的接口:
首先要初始化:

mysql_init()


可以看到其返回MYSQL*:

然后就要连接:

MYSQL*mysql_real_connect(MYSQL*mysql,constchar*host,constchar*user,constchar*passwd,constchar*db,unsignedintport,constchar*unix_socunsignedlongclientflag);

为了便于测试,我们先创建用于连接的用户和数据库:

mysql>createdatabaseconn;Query OK,1rowaffected(0.02sec)mysql>useconn;Databasechanged mysql>createtabletest(->idintprimarykeyauto_increment,->namevarchar(20)notnull,->agetinyintdefault18->);Query OK,0rowsaffected(0.04sec)mysql>grantallonconn.*to'conn'@'localhost';Query OK,0rowsaffected(0.01sec)

连接数据库后通过mysql_query调用mysql:

intmysql_query(MYSQL*mysql,constchar*q);

我们先简单连接一下:

#include<iostream>#include<mysql/mysql.h>intmain(){MYSQL*mysql=mysql_init(nullptr);mysql=mysql_real_connect(mysql,"localhost","conn","123456","conn",3306,nullptr,0);if(mysql==nullptr)std::cerr<<"mysql connect errot\n";mysql_close(mysql);return0;}

当然这样不能有什么效果,我们故意将密码写错:

zhangwho@VM-0-2-ubuntu:~/Trainning/2026_1_29$ ./test mysql connect error

很好,接下里我们尝试插入数据:

#include<iostream>#include<mysql/mysql.h>intmain(){MYSQL*mysql=mysql_init(nullptr);mysql=mysql_real_connect(mysql,"localhost","conn","123456","conn",3306,nullptr,0);if(mysql==nullptr){std::cerr<<"mysql connect error\n";return1;}if(mysql_query(mysql,"insert into test(name) values('Alice')"))std::cerr<<"mysql query error\n";elsestd::cout<<"mysql query success\n";mysql_close(mysql);return0;}


没问题。
继续插入:

if(mysql_query(mysql,"insert into test(name) values('张三')"))


也没问题,说明我们的编码格式适配的很好。
那么我们尝试select:

if(mysql_query(mysql,"select * from test"))std::cerr<<"mysql query error\n";elsestd::cout<<"mysql query success\n";
zhangwho@VM-0-2-ubuntu:~/Trainning/2026_1_29$ ./test mysql query success

成功是成功了,但是没有什么结果啊!
我们还需要其他接口:

MYSQL_RES*mysql_store_result(MYSQL*mysql);

该函数会调用MYSQL变量中的st_mysql_methods中的 read_rows 函数指针来获取查询的结果。同时该函数会返回MYSQL_RES 这样一个变量,该变量主要用于保存查询的结果。同时该函数malloc了一片内存空间来存储查询过来的数据,所以我们一定要记的 free(result),不然是肯定会造成内存泄漏的。 执行完mysql_store_result以后,其实数据都已经在MYSQL_RES 变量中了,下面的api基本就是读取MYSQL_RES 中的数据。

我们可以看到MYSQL_RES的结构:

此外,还能通过接口直接获取MYSQL_RES的数据:
获取结果行数mysql_num_rows

my_ulonglongmysql_num_rows(MYSQL_RES*res);

获取结果列数mysql_num_fields

unsignedintmysql_num_fields(MYSQL_RES*res);

获取列名mysql_fetch_fields

MYSQL_FIELD*mysql_fetch_fields(MYSQL_RES*res);

获取结果内容mysql_fetch_row

MYSQL_ROWmysql_fetch_row(MYSQL_RES*result);

最后释放MYSQL_RES

voidmysql_free_result(MYSQL_RES*result);

那么接下来我们就可以如此操作:

//获取列名for(inti=0;i<col;i++){std::cout<<filed[i].name<<'\t';}std::cout<<std::endl;//获取内容MYSQL_ROW line;for(inti=0;i<row;i++){line=mysql_fetch_row(res);for(intj=0;j<col;j++){std::cout<<line[j]<<'\t';}std::cout<<std::endl;}mysql_free_result(res);

输出:

zhangwho@VM-0-2-ubuntu:~/Trainning/2026_1_29$ ./test mysql query successidname age1Alice182张三18

没有问题

workbench

workbench是mysql官网提供的图形化界面

我们可以在win上下载workbench,当然同时要先下载mysql。

如果不想两个分开下载,我们可以下载MySQL Installer

选择下面的安装包,然后:

选择Full即可。
在等待下载的这段时间,我们可以将conn的登录主机改为%:

mysql>updateusersetHost='%'whereuser='conn';Query OK,1rowaffected(0.01sec)Rowsmatched:1Changed:1Warnings:0mysql>selecthost,user,authentication_stringfromuser;+-----------+------------------+------------------------------------------------------------------------+|host|user|authentication_string|+-----------+------------------+------------------------------------------------------------------------+|%|conn|$A$005$o`unF%\r~f~%53Hmgs258v3VDpbsTfYTu4gyTbyCDhGIsJpwUgjKM.k6B8||localhost|mysql.infoschema|$A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED||localhost|mysql.session|$A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED||localhost|mysql.sys|$A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED||localhost|root|$A$005$c3OCZ*k@w6s4#r)oD1TOBStybtxtwaEeZ1KfZ9mbVFiR4LD3x/1vxhtrnD |+-----------+------------------+------------------------------------------------------------------------+5rowsinset(0.00sec)

当然这样修改是不足的,还需要对一些权限进行修改。最好就是删除了重新创建用户。
随后我们使用这个账户继续进行测试.

选择+,添加新的连接:


如此我们就能对数据库进行操作:

我们能直接在图形界面写入数据,然后点击右下角的apply

他就会自动写入相应的sql语句。
总之就是这样!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 16:05:59

三星SCX-4321打印机驱动下载:新手通用教程,快速搞定安装

对于需要靠打印机处理文件、完成工作的用户来说&#xff0c;驱动故障就像突然断了的“桥梁”&#xff0c;让原本高效的办公节奏瞬间停滞。小编结合多年行业经验和实测数据&#xff0c;为大家整理了这份三星SCX-4321打印机驱动下载的深度指南&#xff0c;从原因解析到渠道选择&a…

作者头像 李华
网站建设 2026/6/15 14:56:28

SpringBoot+Vue web大学生一体化服务平台管理平台源码【适合毕设/课设/学习】Java+MySQL

系统架构设计### 摘要 随着信息技术的快速发展&#xff0c;高校管理服务逐渐向数字化、智能化方向转型。传统的学生服务管理模式存在效率低、信息孤岛、数据冗余等问题&#xff0c;难以满足现代高校管理的需求。大学生一体化服务平台通过整合教务、生活、社交等功能&#xff0…

作者头像 李华
网站建设 2026/6/15 13:50:44

图扑 HT 实现数字孪生智慧服务器信息安全监控平台

在数字化时代&#xff0c;服务器信息安全监控的智能化、可视化需求日益凸显。图扑软件依托自主研发的 HT for Web 技术栈&#xff0c;打造了数字孪生智慧服务器信息安全监控平台&#xff0c;无需依赖任何第三方前端插件&#xff0c;通过常规前端接口对接方案&#xff0c;实现了…

作者头像 李华
网站建设 2026/6/15 8:32:07

实测!DS File搭载cpolar后,NAS 文件远程访问竟这么简单

DS File 是群晖 NAS 的配套文件管理软件&#xff0c;主要功能包括 NAS 文件的分类存储、一键搜索、跨设备同步&#xff0c;还能联动智能家居设备查看存储的监控录像、家庭照片等&#xff0c;是管理 NAS 文件的核心工具&#xff0c;覆盖了办公文件处理和家庭数据管理的核心场景。…

作者头像 李华
网站建设 2026/6/15 12:49:34

I/ITSEC 2025:XR虚拟训练在国防部署中的应用重点

XR军事训练已经趋于常态化。现在&#xff0c;该技术正在被视为基础设施的一部分&#xff0c;部署、集成和规模预估等实际问题正在成为项目审查中的重要考虑因素。 每年12月&#xff0c;奥兰多都会成为训练和模拟的全球交汇点。I/ITSEC将国防、工业和学术界聚集在一起&#xff0…

作者头像 李华
网站建设 2026/6/15 14:52:10

免费查AI率:学术人的“防坑指南”与工具实测

凌晨两点&#xff0c;我盯着电脑屏幕上的论文重复率报告&#xff0c;后背发凉——原本以为“借鉴”了几篇文献无伤大雅&#xff0c;结果查重率飙到35%&#xff0c;导师的邮件提示音像定时炸弹般在耳边回响。这种经历&#xff0c;大概每个经历过论文季的人都懂&#xff1a;查重不…

作者头像 李华