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

news/2025/9/23 20:12:15/文章来源:https://www.cnblogs.com/ljbguanli/p/19107970

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自己做的网站如何链接到百度浅谈电子商务网站的建设与管理

C#制作定时任务工具执行CMD命令 概要准备知识点实现原理thinkphp配置winform执行CMD命令读取ini配置文件定时任务Quartz.Net 完整代码Job.csIniFunc.csForm1.csconfig.ini简易定时任务工具雏形 概要 很多时候写接口上线后还会遇到很多修改&#xff0c;类似JAVA,C#,delphi制作的…

集团企业网站设计方案免费的ppt制作软件

高级命令 keys * 返回满足条件的所有key&#xff0c;可以模糊匹配exists 是否存在指定的keypersist 取消过期时间select 选择数据库 &#xff08;0-15&#xff0c;总共16个数据库&#xff09;move key index 将当前数据库的 key 移动到给定的数据库 db 当中randomkey 随机返回…

地产项目网站建设监理杂志网站

以共享的方式实现不同节点之间数据交互的通信模式。 参数服务器是基于服务实现的&#xff0c;包含客户端和服务器端&#xff0c;服务端节点可以存储数据&#xff0c;客户端节点可以访问服务端节点操作数据&#xff0c;这个过程虽然基于请求响应的&#xff0c;但是无需自己实现…

网站认证网店 网站建设策划书

我们将上面开发的服务提供方服务&#xff0c;部署到2个独立的节点上&#xff08;192.168.14.1和10.10.4.125&#xff09;&#xff0c;然后可以通过Dubbo管理中心查看对应服务的状况&#xff0c;如图所示&#xff1a; 上图中可以看出&#xff0c;该服务有两个独立的节点可以提供…

网站建设 维护 编程wordpress 文章广告

项目介绍 本论文系统地描绘了整个网上论坛管理系统的设计与实现&#xff0c;主要实现的功能有以下几点&#xff1a;管理员&#xff1b;首页、个人中心、用户管理、公告管理、公告类型管理、热门帖子管理、帖子分类管理、留言板管理、论坛新天地、我的收藏管理、系统管理&#…

微信公众号的微网站怎么做的怎么做p2p网站

得到一个wma或mp3文件&#xff0c;如何用最简单的方法得到它的长度信息呢&#xff1f; Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiMultimedia/html/delphi_20061108195617169.html不需要知道歌手名专辑名等&#xff0c;只要长度即可&#xff0c;哪个指令可以做…

网站开发app小程序软件开发的环节有哪些

最近在使用 IIS 发布 PHP 网站时&#xff0c;我遇到了一个前端问题&#xff0c;即字体库文件 404 错误。这个问题的根本原因是 IIS 未能正确识别字体文件类型&#xff0c;导致浏览器在加载页面时无法正确获取所需字体资源&#xff0c;进而触发了404错误。这样的问题会导致网站页…

网站兼职做计划赚小钱视频音乐网站怎样建设

使用PPMI改进共现矩阵 共现矩阵的元素表示两个单词同时出现的次数&#xff0c;这里的次数并不具备好的性质&#xff0c;举个例子&#xff0c;有短语叫the car&#xff0c;因为the是个常用词&#xff0c;如果以两个单词同时出现的次数为衡量相关性的标准&#xff0c;与drive 相…

day002

今日完成:斗地主牌组,牌类. 明日完成:斗地主游戏程序 遇到问题:无.

蚂蜂窝网站分析网站域名asia是

目录 1 TVS管外观结构 2 TVS管常见品牌 ​编辑3 TVS管命名规则 4 TVS管工作原理 5 TVS基本特点 6 TVS典型应用 7 TVS管电气参数说明 7.1 VRWM 截止电压&#xff0c;IR 漏电流 7.2 VBR 击穿电压 7.3 IPP 峰值脉冲电流&#xff0c;VC 钳位电压 8 TVS选型注意事项 8.1…

PyTorch图神经网络(四)

PyTorch图神经网络(四) 1.GraphSAGE ​ 从这里开始的第三篇,开始将更加偏向实际使用的图神经网络了。GraphSAGE是一种图神经网络架构,旨在处理大型图。 邻居采样: ​ 这里引入了一个基本概念:小批量。在大型图中…

【51单片机】【protues仿真】基于51单片机密码锁系统 - 详解

【51单片机】【protues仿真】基于51单片机密码锁系统 - 详解2025-09-23 20:07 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…

网站设计案例方案广告网页

centos7 mysql 基本测试&#xff08;7&#xff09;主从并行简单测试 重启MySQL服务使配置生效。 注意&#xff1a;并行复制需要slave的硬件资源充足&#xff0c;并且确保网络通信和IO性能不是瓶颈。不是所有的应用场景都适合并行复制&#xff0c;比如写密集型应用或者slave负…

网站配色金华网站建设建设设计网站

function _reverse(number) { // 补全代码 return (number ).split().reverse().join(); } number &#xff1a;首先&#xff0c;将数字 number 转换为字符串。在 JavaScript 中&#xff0c;当你将一个数字与一个字符串相加时&#xff0c;JavaScript 会自动将数字转换为字符串…

竹子建站加盟咨询wex5可以做网站吗

python中对文件、文件夹&#xff08;文件操作函数&#xff09;的操作需要涉及到os模块和shutil模块。 得到当前工作目录&#xff0c;即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目录名:os.listdir() 函数用来删除一个文件:os.remove() 删除多个目…

建分类网站得花多少钱阿里建站系统

一、21根火柴棍问题&#xff08;21 Matchticks Problem&#xff09; 21根火柴棍问题是西方经典游戏之一。 给定21根火柴&#xff0c;2个人A和B&#xff08;比如&#xff1a;分别是计算机和用户&#xff09;。 每个人一次可以挑选 1-- 4 根火柴。 被迫挑最后一根火柴的人输了…

济南自助建站系统导航网站开发

复制模式和扩展模式扩展器模式在最近几年变得很流行&#xff0c;甚至已经在OSGi标准&#xff08;例如&#xff0c;蓝图服务和Web应用程序规范&#xff09;中使用。 在处女座&#xff0c;我们从一开始就与扩展程序一起工作&#xff0c;但是尽管它们具有优势&#xff0c;但它们仍…

滨州五学一做考试网站网站制作介绍

组网需求 如图1所示&#xff0c;SwitchA、SwitchB和SwitchC之间运行OSPF&#xff0c;SwitchA和SwitchB之间的交换机仅作透传功能。现在需要SwitchA和SwitchB能快速感应它们之间的链路状态&#xff0c;当链路SwitchA-SwitchB发生故障时&#xff0c;业务能快速切换到备份链路Swi…

最好的免费logo设计网站亚马逊aws在线观看

Lab 1: 应用程序建模 实验目标 这个实验的目的是展示如何在Visual Studio 2010旗舰版中进行应用程序建模。团队中的架构师会通过建模确定应用程序是否满足客户的需求。 你可以创建不同级别的详细模型&#xff0c;并将它们彼此结合、测试然后发布到你的开发计划里。 在这个实验中…

告别材料乱堆、用电违规!AI 施工监测系统覆盖重点施工场景隐患

在建筑施工的复杂环境中,各类安全隐患犹如潜藏的暗礁,时刻威胁着项目的顺利推进。施工现场材料堆放杂乱无章,重物滚落、易燃物混放;安全通道被随意占用;施工用电违规现象,私拉乱接电线、设备未接地等;大型设备若…