尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【MySQL】使用C/C++链接mysql数据库 - 指南

【MySQL】使用C/C++链接mysql数据库 - 指南
📅 发布时间:2026/6/19 5:07:24

【MySQL】使用C/C++链接mysql数据库 - 指南

一、安装数据库

安装我们要使用的数据库有两种方法

  1. 手动安装包导入
    在数据库的官网找到对应版本的安装包,然后导入自己的系统库中去,在项目需要时用include包一下头库文件即可
  2. 直接用系统指令下载
    以Ubantu20.04举例
sudo apt install -y libmysqlclient-dev

这样我们的库中就将mysql安装包下载好了,在使用时如果报错记得在编译时包一下头文件和库文件的路径

例如:

g++ -o $@ $^ -I./include -L./lib -lmysqlclient

如果找不到可以使用下面的指令,可以找出这个库安装的所有文件的路径

dpkg -L libmysqlclient-dev

在这里插入图片描述
include 包含所有的方法声明, lib 包含所有的方法实现(打包成库)

二、接口使用

1.初始化

使用库之前先初始化

MYSQL *mysql_init(MYSQL *mysql);

例:

//1.初始化
if(my==nullptr)
{
std::cerr<<
"init error"<<std::endl;
return 1;
}

2.链接

初始化完毕之后,必须先链接数据库,在进行后续操作

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 clientflag);

举例:

//2.连接
if(mysql_real_connect(my,host.c_str(),user.c_str(),password.c_str(),db.c_str(),port,nullptr,0)==nullptr)
{
std::cerr<<
"connect error"<<std::endl;
return 2;
}

如果发现自己数据出现乱码的情况,可能是编码没有将编码没有设置好

默认是latin,可以显示英文,但要显示中文需将默认字符集改为utf_8

mysql_set_character_set(myfd, "utf8");

3.执行mysql命令

int mysql_query(MYSQL *mysql, const char *q);

第一个参数为初始化的返回值,第二个参数为要执行的sql语句,如“select * from table”

//3.命令
std::string sql="select * from users";
int n=mysql_query(my,sql.c_str());
if(n==0)
{
std::cout<<
"query "<<sql<<
" success"<<std::endl;
}
else
{
std::cerr<<
"query "<<sql<<
" error"<<std::endl;
return 3;
}

到这里如果我们执行的是增删改等修改操作的话,就已经成功执行了,但如果是要执行查找等需要查看结果的SQL语句,我们就还需要通过一个接口来获取查找的数据

4.查看执行结果数据

MYSQL_RES *mysql_store_result(MYSQL *mysql);
MYSQL_RES* res = mysql_store_result(my);

该函数会调用MYSQL变量中的st_mysql_methods中的 read_rows 函数指针来获取查询的结果。

同时该函数会返回MYSQL_RES 这样一个变量,该变量主要用于保存查询的结果,同时malloc了一片内存空间来存储查询过来的数据,所以我们一定要记的 free(result),不然是肯定会造成内存泄漏的。

执行完mysql_store_result以后,其实数据都已经在MYSQL_RES 变量中了,下面的api就是来读取MYSQL_RES 中的数据。

  1. 获取结果行数mysql_num_rows
my_ulonglong mysql_num_rows(MYSQL_RES *res);
  1. 获取结果列数mysql_num_fields
unsigned int mysql_num_fields(MYSQL_RES *res);
  1. 获取列名mysql_fetch_fields
MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);
  • 获取列名属性
//属性
MYSQL_FIELD *fields_array = mysql_fetch_fields(res);
for(int i=0;i<fields;i++)
{
std::cout<<fields_array[i].name<<
"\t";
}
std::cout<<std::endl;

在这里插入图片描述

  • 获取数据
//数据
for(int i=0;i<rows;i++)
{
MYSQL_ROW row = mysql_fetch_row(res);
for(int j=0;j<fields;j++)
{
std::cout<<row[j]<<
"\t";
}
std::cout<<std::endl;
}

在这里插入图片描述

5.释放空间,关闭mysql链接

// 释放结果空间
mysql_free_result(res);
// 关闭mysql连接
mysql_close(my);

相关新闻

  • day002
  • 【51单片机】【protues仿真】基于51单片机密码锁系统 - 详解
  • cv-css 快捷方式,将指定节点的计算样式获取下拉 获取tailwind网页样式成原生样式

最新新闻

  • 【FDTD+UPML+全场/散射场】具有TF/SF接口和UPML吸收边界的2D FDTD研究(Matlab代码实现)
  • RayScan开箱即用的 Web 漏洞扫描器 | SQL注入 / XSS / 命令注入 / LFI / SSRF / XXE / RCE / API安全
  • Java安全随机数生成:从Random到SecureRandom的实战指南
  • STM8L15x开发板实测DS18B20温度采集工程(IAR环境,含完整驱动与调试脚本)
  • kafka源码-@KafkaListener消费端的poll调用逻辑
  • 3分钟学会:Windows上最轻量的安卓APK安装工具完全指南

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号