MySQL访问个人学习笔记
一、MySQL访问的本质在前面几篇博客中已完成了数据库的基本使用和原理相关学习和梳理本篇介绍如何使用语言连接MySQL。已知MySQL有客户端和服务端程序员要做的就是编写业务逻辑将需求发给客户端客户端进而访问服务端并将结果返回给主程序所以一开始在shell中调用systemctl start mysql就是启动服务端进程而mysql登录就是打开客户端并连接服务器二、访问相关方法介绍为了操作数据库资源一开始需创建对应的MYSQL结构体对象并初始化。像这种用于在程序中唯一标识、引用和操作特定的对象或系统资的数据类型通常被称为句柄。MYSQL *my mysql_init(NULL);初始化完毕后需连接到数据库如果是远端登录要求数据库提前创建好允许远端登录的用户用户需要具备操作的权限。连接需要的参数大多和在shell上进行MySQL登录用到的差不多。需注意的是链接也有自己的字符集可以理解成当前程序的字符集比如你要插入数据的话是以当前程序的字符集为标准的。而已为了不和数据库字符集冲突需要重新设置链接字符集。mysql_set_character_set(my, utf8);代码示例如下//函数原型 /*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);*/ const std::string host 127.0.0.1;//本地登录 const std::string user Cuser; const std::string passward 1234567; const std::string db Ctest;//数据库名 const unsigned int port 3306;//这里端口号和mysql配置文件中的端口号相同可查询或修改 int main() { // printf(mysql client Version: %s\n, mysql_get_client_info()); MYSQL *my mysql_init(NULL); // 初始化MYSQL类 if (my nullptr) { std::cerr mysql init fail std::endl; return 1; } // 连接数据库 if (mysql_real_connect(my, host.c_str(), user.c_str(), passward.c_str(), db.c_str(), port, nullptr, 0) nullptr) { std::cerr mysql connect fail std::endl; return 2; } // 无法连接 std::cout mysql connect success std::endl; // 更改编码集 mysql_set_character_set(my, utf8); }随后就可以调用接口操作数据库了std::string insertsqlinsert into user values(张三,555,金榜花园); int flag mysql_query(my, insertsql.c_str()); if (flag 0) { std::cerr do sql fail std::endl; return 3; }插入、删除和修改都是单向的客户端只需要返回是否执行成功即可比较复杂的是查询语句即便客户端能把结果给到主程序也需要配套的读取数据的机制。当读取命令执行成功后创建MYSQL_RES结构体指针并调用mysql_store_resul函数来接收指定MYSQL对象的结果。既然创建的是指针说明函数自动为其申请了空间使用完毕后需释放。MYSQL_RES *res mysql_store_result(my); /*后续操作...*/ mysql_free_result(res);//释放结果集数据在MYSQL_RES结构体中的存放形式如图在一维数组中存放数据行数个char**每个二级指针又指向一个char*数组每个char*指向的就是某行某列的数据。随后可以调用mysql_num_rows()和mysql_num_fields()获取返回数据的行列数再引入MYSQL_ROWchar**类型别名并调用 mysql_fetch_row()来获取单行指针该结构相当于指向结果某行的char**根据行数决定要调用多少次mysql_fetch_row()根据列数遍历具体全部数据。注1mysql_fetch_row()每次调用后会自动指向下一行不需要主程序控制。注2如果想获取列名则调用mysql_fetch_fields(),一次返回所有字段定义的数组配合mysql_num_fields()使用代码如下MYSQL_RES *res mysql_store_result(my); int row mysql_num_rows(res); int fi mysql_num_fields(res); MYSQL_FIELD *field mysql_fetch_fields(res); int i 0; for (; i fi; i) { std::cout field[i].name ; } std::cout std::endl; i 0; MYSQL_ROW line; for (; i row; i) { line mysql_fetch_row(res); int j 0; for (; j fi; j) { std::cout line[j] ; } std::cout std::endl; }三、浅谈从网页到数据库的流程注册在正式提供服务之前需要提前为待存放的数据建立多个数据库。用户打开浏览器网页发起连接请求即三次握手那一套流程服务器随即应答并返回登录页面。用户点击注册跳转到注册页面后输入用户名和密码服务器通过脚本语言如 Java、Python 等对请求进行解析随后经由中间件和负载均衡机制将数据分发到对应的数据库及数据表中。各数据库之间会定期进行数据同步以保证数据的一致性。登录浏览器会先检查该账号是否存在 Cookie 缓存若存在则可能直接完成登录需要注意的是Cookie 并非账号密码的副本而是用于验证当前会话是否有效的标志若不存在服务器会先调用 select 语句验证该账号在数据库中是否存在若存在则正常登录即校验密码哈希运算的结果是否与数据库中的记录相匹配。

相关新闻

Day85-全链路压测体系搭建:从JMeter到生产压测平台

Day85-全链路压测体系搭建:从JMeter到生产压测平台

上篇回顾:Day 84 用 Arthas 在不重启 JVM 的情况下五分钟定位生产故障、热修复走紧急发布。但单点诊断解决的是"某个接口为什么慢",压测要解决的是"整条链路在什么量会崩"。这篇给你真正生产可用的全链路压测体系。单接口压测最大的…

2026/10/10 12:10:45 阅读更多 →
PID三作用详解与整定口诀:一张图看懂比例、积分、微分

PID三作用详解与整定口诀:一张图看懂比例、积分、微分

做自动化这些年,PID 绝对是绕不开的一道坎。不管是调温、调压、调流量,还是转速、位置、浓度控制,翻开控制器参数列表,八成又是“Pxxx, Ixxx, Dxxx”。刚入行的时候我也死记硬背过公式,被整定口诀搞得云里雾里&#xf…

2026/10/10 12:10:44 阅读更多 →
基于PJ85718DM与STM32F413RH的多点温度监测系统设计与实现

基于PJ85718DM与STM32F413RH的多点温度监测系统设计与实现

1. 项目背景与核心需求拆解温度监测这件事,看起来简单,真要做到"本地准、远程稳、长期不飘",里面的门道比想象中多得多。我这次做的项目,核心就是用一颗PJ85718DM温度传感芯片配合STM32F413RH主控,搭一套能同…

2026/10/10 12:10:44 阅读更多 →

最新新闻

Java五子棋网络对战毕设:TCP Socket实战源码与工程解析

Java五子棋网络对战毕设:TCP Socket实战源码与工程解析

简介:本资源是一套面向计算机专业本科生的Java毕设实战项目,聚焦手机端五子棋网络对战游戏的设计与实现,适用于Java初学者向中阶开发者进阶,尤其适合需完成毕业设计、夯实网络编程与GUI开发能力的学生。压缩包共5.55MB&#xff0c…

2026/10/10 14:34:30 阅读更多 →
JSP+MySQL宿舍管理系统实战:从建表到避坑的完整指南

JSP+MySQL宿舍管理系统实战:从建表到避坑的完整指南

简介:这份实训作业资源面向计算机相关专业学生与Java Web初学者,提供一套基于JSP与MySQL的学生宿舍管理系统完整实现,可用于课程设计、毕业实训或自学练手。系统围绕学生信息、宿舍登记、住宿分配与调整、费用管理、在线报修、统计报表及用户…

2026/10/10 14:34:30 阅读更多 →
HP DL388 G7服务器实战指南:RAID配置、iLO管理与系统安装

HP DL388 G7服务器实战指南:RAID配置、iLO管理与系统安装

简介:这份 PDF 文档是 HP ProLiant DL388 G7 服务器的官方用户指南,面向企业 IT 运维人员、机房管理员及刚接触该型号服务器的技术人员,用于解决设备安装、日常使用与状态排查中的实际问题。资源包共 1 个文件,为单个 PDF 格式&am…

2026/10/10 14:34:30 阅读更多 →
Spring Bean实例化全解析:四种XML配置方式与选择指南

Spring Bean实例化全解析:四种XML配置方式与选择指南

1. 先厘清&#xff1a;Spring 里的“实例化”到底指什么1.1 容器为什么需要掌控创建过程Spring 的 XML 配置在今天看来确实有点老派&#xff0c;但只要你维护过任何一个五年以上的 Java 服务&#xff0c;几乎都见过类似<bean id"xxx" class"com.xxx.Xxx"…

2026/10/10 14:34:30 阅读更多 →
别高兴太早:147 个 Raycast 命令里 33 个在 Tinycast 上跑不起来

别高兴太早:147 个 Raycast 命令里 33 个在 Tinycast 上跑不起来

别高兴太早&#xff1a;147 个 Raycast 命令里 33 个在 Tinycast 上跑不起来 【免费下载链接】tinycast Tinycast — a tiny, fully native macOS launcher, hotkeys, and clipboard history. 项目地址: https://gitcode.com/GitHub_Trending/ti/tinycast 当一款开源启动…

2026/10/10 14:34:30 阅读更多 →
深入 OOOSplat 架构:Tauri 2 + Rust + React 如何打造本地高斯泼溅桌面应用

深入 OOOSplat 架构:Tauri 2 + Rust + React 如何打造本地高斯泼溅桌面应用

桌面应用图形学3D渲染计算机视觉 【免费下载链接】ooosplat A local desktop app that turns videos and images into 3D Gaussian Splats in one click. 项目地址&#xff1a; https://gitcode.com/gh_mirrors/oo/ooosplat 点击查看 免费下载 OOOSplat 是一款本地桌面应用&am…

2026/10/10 14:33:29 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起&#xff1a;为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念&#xff0c;很多人会觉得它离自己很远——不就是天上的星星怎么转吗&#xff1f;但如果你正在做航天任务规划、遥感数据接收、星座设计&#xff0c;甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起&#xff1a;为什么你的代码里到处都是重复逻辑刚入行那会儿&#xff0c;我写过一个用户管理模块&#xff0c;注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么&#xff0c;能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介&#xff1a;这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目&#xff0c;以Boss直聘岗位数据为对象&#xff0c;适合用作毕业设计、课程设计或期末大作业。资源包共38个文件&#xff0c;约246KB&#xff0c;以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →