当前位置: 首页 > news >正文

【MySQL】Ubuntu下C++连接MySQL

C++连接MySQL

  • ubuntu下载MySQL
  • 1.构建mysql对象,获得mysql访问句柄
  • 2.mysql的连接
  • 3.向mysqld下达命令(增删改)
  • 3.C_C++查询细节处理
    • 3.1 下达查询命令
    • 3.2 转储查询结果
    • 3.3显示查询结果
  • 4.编译链接

ubuntu下载MySQL

sudo apt install libmysqlclient-dev

在这里插入图片描述
下载完毕,后就可以从/usr/include/mysql看到mysql的头文件。
并可以从/usr/lib/x86_64-linux-gnu看到mysql的动静态库
在这里插入图片描述

mysql的库是属于第三方库,gcc/g++默让是连接c/c++的库的,在编译链接时需要手动指定链接的库的位置和名称

1.构建mysql对象,获得mysql访问句柄

mysql对象的创建初始化,在这里进行初始化这个对象的时候这个东西其实就相当于我们学文件当中所对应的那个大写的FILE”,就相当于我们学系统当中对应的文件描述符fd,统一用来标识一部分我们mysql客户端相关的资源.
其中呢,我们把这种东西呢一般可以称之为句柄

 //创建mysql句柄,类似文件描述符MYSQL *my =mysql_init(nullptr);if(my==nullptr){std::cerr<<"init error"<<std::endl;return 1;}

2.mysql的连接

mysqld是一个网络服务(底层是tcp),在接受到sql指令执行之前,需要先建立连接。在这里插入图片描述

   const std::string host="127.0.0.1";const std::string username="root";const std::string passwd="123456";const std::string db="db";const int port=3306;//连接数据库mysqld,底层是tcp所以使用之前需要连接if(mysql_real_connect(my,host.c_str(),username.c_str(),passwd.c_str(),db.c_str(),port,nullptr,0)==nullptr){std::cerr<<"connect error"<<std::endl;}std::cout<<"connect success"<<std::endl;

3.向mysqld下达命令(增删改)

可以通过mysql_query()来对数据库进行操作在这里插入图片描述

   //给mysql下达命令 std::string sql="insert into students values(1,22,'男');";int n=mysql_query(my,sql.c_str());if(n==0){std::cout<<"操作成功"<<std::endl;}else{std::cout<<"操作失败"<<std::endl;}

【客户端编码问题】

所有的乱码问题,那么一定是因为客户端和服务器双方对于编码问题没有形成一致
1.建立好链接之后,获取英文没有问题,如果获取中文是乱码,就说明两端的编码不一致
2.设置链接的字符集是utf8,原始默认是latin1
(在mysql5.7的时候,mysqlclient默认编码是latin1,如果插入中文就会乱码,所以链接成功数据库后,需要设置编码,mysql_set_character_set(my, “utf8”);
但是8.0之后,默认是utf8mb4,无需设置)

 mysql_set_character_set(my,"utf8");

3.C_C++查询细节处理

在C_C++语言下要想进行数据库的查询select工作,不仅仅是向mysqld下达select命令,还要将查询的结果保存起来,这样才能将结果显示出来。 在这里插入图片描述

3.1 下达查询命令

//给mysql下达select命令 std::string sql="select *from students;";int n=mysql_query(my,sql.c_str());if(n==0){std::cout<<"操作成功"<<std::endl;}else{std::cout<<"操作失败"<<std::endl;}

3.2 转储查询结果

//将结果保存起来MYSQL_RES * res =mysql_store_result(my);if(nullptr == res){std::cerr<<"mysql_store_result error"<<std::endl;return 2;}

3.3显示查询结果

在这里插入图片描述

 //获取二维表的行数和列数int rows=mysql_num_rows(res);int fields=mysql_num_fields(res);std::cout<<"行数:"<<rows<<std::endl;std::cout<<"列数:"<<fields<<std::endl;

在这里插入图片描述

 //获取二维表的列名MYSQL_FIELD *fields_array=mysql_fetch_fields(res);for(int i=0;i<fields;i++){std::cout<<fields_array[i].name<<"\t";}std::cout<<"\n"<<std::endl;

在这里插入图片描述

   //获取二维表的内容for(int i=0;i<rows;i++){MYSQL_ROW rowarry=mysql_fetch_row(res);for(int j=0;j<fields;j++){std::cout<<rowarry[j]<<"\t";}std::cout<<"\n";}

4.编译链接

g++ -o mytest test.cpp -L/usr/lib/x86_64-linux-gnu -lmysqlclient

在这里插入图片描述

相关文章:

  • AWS上构建基于自然语言的数值和符号计算系统
  • (51单片机)LCD显示数据存储(DS1302时钟模块教学)(LCD1602教程)(独立按键教程)(延时函数教程)(I2C总线认识)(AT24C02认识)
  • Redis——网络模型之IO讲解
  • 系统架构设计师:流水线技术相关知识点、记忆卡片、多同类型练习题、答案与解析
  • 数据库原理及应用mysql版陈业斌实验四
  • 高级java每日一道面试题-2025年4月14日-微服务篇[Nacos篇]-Nacos是如何实现对多数据中心的支持的?
  • 解决Windows安全中心显示空白页面
  • PHP8.2.9NTS版本使用composer报错,扩展找不到的问题处理
  • <C#>.NET WebAPI 的 FromBody ,FromForm ,FromServices等详细解释
  • thinkphp实现图像验证码
  • 微信小程序中,将搜索组件获取的值传递给父页面(如 index 页面)可以通过 自定义事件 或 页面引用 实现
  • 电路安全智控系统与主机安全防护系统主要功能是什么
  • 社交媒体时代的隐私忧虑:聚焦Facebook
  • 使用Trae CN分析项目架构
  • Jenkins 多分支流水线: 如何创建用于 Jenkins 状态检查的 GitHub 应用
  • STL详解 - priority_queue
  • 探索元生代:ComfyUI 工作流与计算机视觉的奇妙邂逅
  • 【数据结构】第四弹——LinkedList与链表
  • chili3d调试笔记3 加入c++ 大模型对话方法 cmakelists精读
  • 学习海康VisionMaster之中线查找
  • 哈马斯同意释放剩余所有以方被扣押人员,以换取停火五年
  • 以军称若停火谈判无进展,将大幅扩大加沙军事行动
  • 为何不当教练转型高校管理岗?苏炳添曾吐露过真实的想法
  • 健康社区“免疫行动”促进计划启动,发布成人预防“保典”
  • 从息屏24小时到息屏1小时,姚明在深圳开启落地试点
  • 上海未来亚洲研究会第六届会员大会举行,叶青当选会长