【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,一经查实,立即删除!

相关文章

Nginx 实战-02-nginx proxy_pass 服务代理访问 使用笔记 ubuntu nodejs

前言 大家好&#xff0c;我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的&#xff0c;可以参考我的另一个项目&#xff1a; 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …

达梦数据库(五) -------- 达梦数据库+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)"&…

centOS 编译C/C++

安装C和C编译器 yum -y install gcc*查看CenterOS系统信息 cat /etc/system-releaseCentOS Linux release 8.2.2004 (Core)查看gcc版本 gcc --versiongcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4) Copyright (C) 2018 Free Software Foundation, Inc. This is free software…

深入理解同步与异步编程:从概念到实践

导言&#xff1a; 在软件开发中&#xff0c;同步和异步是两种常见的编程模式。深入理解这两种模式的工作原理对于提高代码的效率和性能至关重要。本文将从概念、原理和实践三个方面介绍同步和异步编程&#xff0c;帮助读者更好地理解和应用这两种编程模式。 同步编程&#xf…

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

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

低代码开发:助企构建数字化应用平台

随着信息技术的快速发展&#xff0c;数字化应用平台已经成为企业提升竞争力、实现业务创新的关键。然而&#xff0c;传统的应用开发方式往往面临着开发周期长、成本高昂、技术门槛高等问题&#xff0c;这使得许多企业望而却步。而低代码开发技术的出现&#xff0c;为企业构建数…

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

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

cwiseMax、cwiseMin函数

一、cwiseMax含义 cwiseMax是Eigen库中的一个函数&#xff0c;用于求两个矩阵或向量的逐元素最大值。它的作用类似于std::max函数&#xff0c;但是可以同时处理多个元素&#xff0c;且支持矩阵和向量。 举例&#xff1a; 例如&#xff0c;对于两个向量a和b&#xff0c;cwiseMax…

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 特性 继承性 子级默认继承父级的文字控制属性。层叠性 相同的属性…