【MySQL访问】

文章目录

  • 一、C++远程连接到MySQL
    • mysql_init()函数
    • mysql_real_connect()函数
    • 实战案例
  • 二、处理查询select的细节
    • mysql_store_result()函数
    • 获取结果行和列
    • 获取select结果
      • 获取行内容
      • 获取列属性
  • 三、MySQL图形化界面连接


关于动态链接,请看这篇文章:
动静态库

一、C++远程连接到MySQL

前言:这里我在连接时遇到了一个问题,在/usr/include/目录下,找不到mysql目录,意味着我想用的头文件无法找到,上网查了发现问题是没有安装mysql的开发包,所以去安装了mysql的开发包:
sudo yum install mysql-devel;
就解决了这个问题。

mysql_init()函数

MYSQL *mysql_init(MYSQL *mysql);

案例:

MYSQL *msq = mysql_init(nullptr);

mysql_real_connect()函数

初始化完毕之后,必须先链接数据库,在进行后续操作。(mysql网络部分是基于TCP/IP的)

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); // 标志位

第一个参数 MYSQL是 C api中一个非常重要的变量(mysql_init的返回值),里面内存非常丰富,有port,dbname,charset等连接基本参数。它也包含了一个叫 st_mysql_methods的结构体变量,该变量里面保存着很多函数指针,这些函数指针将会在数据库连接成功以后的各种数据操作中被调用。

mysql_real_connect函数中各参数,基本都是顾名思意。

注意:建立好链接之后,获取英文没有问题,如果获取中文是乱码:
设置链接的默认字符集是utf8,原始默认是latin1
mysql_set_character_set(myfd, “utf8”);

像这里就出现了乱码问题。
在这里插入图片描述
总结:所有的乱码问题,都是因为客户端和服务器的字符编码没有保持一致。

实战案例

const std::string host = "127.0.0.1";
const std::string user = "dzt";
const std::string passwd = "137183";
const std::string db = "rootDB";
const unsigned int port = 8080;int main()
{// 初始化mysql服务器MYSQL *msq = mysql_init(nullptr);if (msq == nullptr){std::cerr << "init mysql error" << std::endl;return 1;}mysql_set_character_set(msq, "utf8"); // 设置默认字符集为utf8,而不是默认的latin1// 连接到mysql服务器if (mysql_real_connect(msq, host.c_str(), user.c_str(), passwd.c_str(), db.c_str(), port, nullptr, 0) == nullptr){std::cerr << "connect to mysql fail!" << std::endl;return 1;}else{std::cout << "connect to mysql success!! " << std::endl;}//让指令能调动mysqlstd::string sql; //不能加const,否则传参时传进getline参数类型不匹配while(1){std::cout << "mysql> ";if(!(std::getline(std::cin,sql)) || sql == "quit")//输入的sql语句为空 || 为quit{std::cout << "bye" << std::endl;break;}//正式输入sql语句,增删查改int n = mysql_query(msq, sql.c_str()); //向msq数据库对象下发指令if(n == 0) //成功{std::cout << "success" << std::endl;}else{std::cerr << "fail" << std::endl;}   }mysql_close(msq);return 0;
}

二、处理查询select的细节

mysql_store_result()函数

MYSQL_RES *mysql_store_result(MYSQL *mysql);

该函数处理select这类查询语句,再合适不过了。

MYSQL_RES是一个对象,主要用来保存查询的结果。

可以按下面的方式理解:

把MYSQL)RES看成一个char**的数组,每个数组都存储着char*[] 一维数组的地址。
所有查询出来的结果,都看成字符串保存再这些数组中。
在这里插入图片描述

获取结果行和列

获取行数

my_ulonglong mysql_num_rows(MYSQL_RES *res);

获取列数

unsigned int mysql_num_fields(MYSQL_RES *res);

获取select结果

根据上面的二维数组列表图,首先要获取行,才能获取列。
上面已经获取了行数和列数,现在则只需要依次获取每一行的内容即可。(即获取每一行的数组)

获取行内容

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

案例:

int rows =  mysql_num_rows(res); //获取行数
int fields = mysql_num_fields(res); //获取列数std::cout << "行:" << rows << " 列:" << fields << std::endl;for(int i = 0;i < rows;i++)
{//打印一行的内容MYSQL_ROW row = mysql_fetch_row(res); //获取res对象中的结果for(int j = 0;j < fields;j++){std::cout << row[j] <<" ";}std::cout << std::endl;
}

在这里插入图片描述

获取列属性

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 << " ";
}
std::cout << std::endl;

在这里插入图片描述

列属性和行内容联动,就获取到了完整的属性名+数据了。

三、MySQL图形化界面连接

推荐使用 navicat 和SQLyog。
具体连接方式请查阅其他文章。

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

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

相关文章

达梦数据库(五) -------- 达梦数据库+mybatisPlus+springboot

前言&#xff1a;安装完达梦数据库后&#xff0c;需要初始化实例&#xff0c;在初始化实例时&#xff0c;需要注意大小写敏感的设置。大小写敏感只能在初始化数据库的时候设置&#xff0c;默认为大小写敏感&#xff0c;一旦设置成功就无法修改&#xff0c;如果想要修改&#xf…

elementui el-tooltip文字提示组件弹出层内容格式换行处理

1、第一种 1.1 效果图 1.2、代码 <template><div class"wrapper"><el-tooltip class"content" effect"dark" placement"top"><div slot"content"><div v-html"getTextBrStr(text)"&…

ai虚拟主播自动切换的实现

前段时间,看到b站突然冒出很多ai主播,输入数字切换小姐姐.感觉挺有趣.思考了以下决定手动实现一下. 然后就陷入长达5天的踩坑中 由于是自建的webrtc服务器,很自然的想直接收流转发,这也是最优的方案, 然而实际上遇到许多不是很友好的bug, 然后再想使用rtp转发,依然不理想. 最后…

【第十二节】C++控制台版本贪吃蛇小游戏

目录 一、游戏简介 1.1 游戏概述 1.2 实现功能 1.3 开发环境 二、实现设计 2.1 C类的设计 2.2 项目结构 2.3 代码设计 三、程序运行截图 3.1 游戏界面 3.2 自定义地图 3.3 常规游戏界面 一、游戏简介 1.1 游戏概述 本游戏是一款基于C语言开发的控制台版本贪吃蛇游…

Python中的魔法函数

大家好&#xff0c;Python作为一种高级编程语言&#xff0c;以其简洁、优雅和易读性而闻名。然而&#xff0c;Python的强大之处不仅仅在于其语法的简洁性&#xff0c;还在于其灵活的面向对象编程范式。在Python中&#xff0c;有一类特殊的方法被称为“魔法函数”&#xff0c;它…

神器!!Python热重载调试【送源码】

在 Python 开发的路上&#xff0c;调试是我们不可避免的一环。 而今天推荐的开源项目Reloadium &#xff0c;让你在不重启程序的情况下实现代码的即时更新和调试。 &#x1f504; Reloadium 功能亮点&#xff1a; 1. 热重载魔法&#xff1a; Reloadium 不仅仅能够实现代码的…

电脑缺失msvcp120.dll要如何解决,学会这七个方法,轻松摆脱困扰

msvcp120.dll 是 Microsoft Visual C 2013 运行时库的一部分&#xff0c;它提供了 C 标准库的实现&#xff0c;使得开发者能够利用丰富的 C 功能来构建复杂的应用程序。这个文件对于使用了 C 标准库的应用程序来说是必不可少的。当这些应用程序运行时&#xff0c;它们会动态链接…

Docker管理工具Portainer忘记admin登录密码

停止Portainer容器 docker stop portainer找到portainer容器挂载信息 docker inspect portainer找到目录挂载信息 重置密码 docker run --rm -v /var/lib/docker/volumes/portainer_data/_data:/data portainer/helper-reset-password生成新的admin密码&#xff0c;使用新密…

Ubuntu安装GCC编译器

GCC编译器安装 GCC编译器安装切换软件源(换成国内的服务器)1 、创建一个文本文档并命名为“sources.list”2 、复制软件源列表清华源:阿里源:3 、把修改之后的.list 文件覆盖原有的文件4 、更新软件列表5 、安装6 、检查是否安装成功7、GCC 编译器:GCC编译器安装 这里演示…

cdo | 常用命令

整理一下平时经常会使用的cdo命令 如何来更改netcdf数据中的变量名呢&#xff1f; 假设我现在有一个sst月平均数据,希望将里面的变量名称sst修改为sst_new netcdf oisst_monthly { dimensions:lat 180 ;lon 360 ;time UNLIMITED ; // (476 currently)nbnds 2 ; variable…

【PTA】7-4 朋友圈(C++ * 并查集思想)代码实现 一点反思

题目如下&#xff1a; AC代码如下&#xff08;参考PTA 7-2 朋友圈&#xff08;25 分&#xff09;_处理微信消息pta-CSDN博客&#xff09; #include<bits/stdc.h> using namespace std; #define sz 30005 typedef struct node{int rk, fa; }Node; Node tree[sz]; void In…

STL:copy简介

STL:copy STL算法&#xff1a;copy std::copy()函数使用 std::copy 函数在 中声明&#xff0c;属于变易算法(Modifying sequence operations)&#xff0c;主要用于实现序列数据的复制 template <class InputIterator, class OutputIterator>OutputIterator copy (InputI…

【SQL学习进阶】从入门到高级应用(九)

文章目录 子查询什么是子查询where后面使用子查询from后面使用子查询select后面使用子查询exists、not existsin和exists区别 union&union alllimit &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f495;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面…

【IB Protocal Serial--WQE】

IB Protocal Serial--WQE 1 Intro1.1 What1.2 IBA WQE 本系列文章介绍RDMA技术的具体实现–InfiniBand Protocal&#xff1b; Introduce the features, capalities,components, and elements of IBA. the principles of operation. 1 Intro 1.1 What 理解IB协议下面这三句话对…

CSS--学习

CSS 1简介 1.1定义 层叠样式表 (Cascading Style Sheets&#xff0c;缩写为 CSS&#xff09;&#xff0c;是一种 样式表 语言&#xff0c;用来描述 HTML 文档的呈现&#xff08;美化内容&#xff09;。 1.2 特性 继承性 子级默认继承父级的文字控制属性。层叠性 相同的属性…

基于RFID技术的烟草在线监测系统在烟草仓库温湿度监测中的应用。

在现代工业生产中&#xff0c;精准高效的在线监测系统对于产品质量控制至关重要。尤其是在高价值且对环境敏感的产品制造过程中&#xff0c;如烟草加工&#xff0c;实时准确的数据采集与分析直接关系到最终产品的品质及安全标准达标程度。 烟草行业在我国属于传统轻工业之一&am…

Vite项目构建chrome extension,实现多入口

本项目使用Vite5 Vue3进行构建。 要使用vite工程构建浏览器插件&#xff0c;无非就是要实现popup页面和options页面。这就需要在项目中用到多入口打包&#xff08;生成多个html文件&#xff09;。 实现思路&#xff1a; 通过配置vite工程&#xff0c;使得项目打包后有两个h…

Spring中的Aware接口

Spring中的Aware接口 Aware接口介绍 Aware是Spring中的接口&#xff0c;它的作用是可以让Bean获取到运行环境的相关信息。比如获取到上下文、Bean在容器中的名称等。 Spring中提供了很多Aware接口的子类&#xff0c;具体如下&#xff1a; 常用接口的作用如下&#xff1a; …

【网络原理】HTTP|认识请求“报头“|Host|Content-Length|Content-Type|UA|Referer|Cookie

目录 认识请求"报头"(header) Host Content-Length Content-Type User-Agent(简称UA) Referer &#x1f4a1;Cookie&#xff08;最重要的一个header&#xff0c;开发&面试高频问题&#xff09; 1.Cookie是啥&#xff1f; 2.Cookie怎么存的&#xff1f; …

视频汇聚EasyCVR视频监控云平台对接GA/T 1400视图库对象和对象集合XMLSchema描述

GA/T 1400协议主要应用于公安系统的视频图像信息应用系统&#xff0c;如警务综合平台、治安防控系统、交通管理系统等。在城市的治安监控、交通管理、案件侦查等方面&#xff0c;GA/T 1400协议都发挥着重要作用。 以视频汇聚EasyCVR视频监控资源管理平台为例&#xff0c;该平台…