C++访问数据库

目录

一、主要流程

二、主要API分析

1.数据库连接与初始化

1.1 mysql_init函数

1.2 mysql_options函数

1.3 mysql_real_connect函数

2.数据库事务操作

2.1 mysql_autocommit函数

2.2 mysql_query函数

3.数据库查询结果处理

3.1 mysql_store_result函数

3.2 mysql_num_fields函数

3.3 mysql_fetch_fields函数

3.4 mysql_fetch_row函数

4.资源释放与关闭连接

4.1 mysql_free_result函数

4.2 mysql_close函数

三、完整代码


   

一、主要流程

  1. 初始化MySQL连接环境。
  2. 建立与本地MySQL数据库的连接。
  3. 关闭自动提交,执行相关数据操作并根据结果提交或回滚事务。
  4. 执行查询操作,获取结果集。
  5. 处理结果集的字段和数据行。
  6. 释放结果集资源并关闭数据库连接。

   

二、主要API分析

1.数据库连接与初始化

1.1 mysql_init函数

MYSQL *mysql_init(MYSQL *mysql);

若传入nullptr则创建新的MYSQL结构用于连接;若传入已有的MYSQL结构则对其进行初始化。

1.2 mysql_options函数

int mysql_options(MYSQL *mysql, enum mysql_option option, const void *arg);

  • mysql:连接对象,操作的目标。
  • option:指定设置的选项类型。
  • arg:要设置的字符集。
1.3 mysql_real_connect函数

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

  • mysql:初始化后的MYSQL结构。
  • host:服务器地址。
  • user:用户名。
  • passwd:密码。
  • db:数据库名。
  • port:端口号。
  • unix_socket:Unix下套接字,可以为空。
  • client_flag:连接标志,默认为0。

  

2.数据库事务操作

2.1 mysql_autocommit函数

int mysql_autocommit(MYSQL *mysql, my_bool auto_mode);

  • mysql:连接对象。
  • auto_mode:0关闭自动提交,1开启自动提交。
2.2 mysql_query函数

int mysql_query(MYSQL *mysql, const char *q);

  • mysql:连接对象。
  • q:要执行的SQL语句字符串。

  

3.数据库查询结果处理

3.1 mysql_store_result函数

MYSQL_RES *mysql_store_result(MYSQL *mysql);

mysql:连接对象,从其获取结果。

3.2 mysql_num_fields函数

unsigned int mysql_num_fields(MYSQL_RES *result);

result:结果集结构指针,返回字段的数量。

3.3 mysql_fetch_fields函数

MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result);

result:结果集结构指针,返回字段信息的数组指针。

3.4 mysql_fetch_row函数

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

result:结果集结构指针,返回下一行数据指针或nullptr。


  

4.资源释放与关闭连接

4.1 mysql_free_result函数

void mysql_free_result(MYSQL_RES *result);

result:结果集结构指针,释放其占用内存。

4.2 mysql_close函数

void mysql_close(MYSQL *mysql);

mysql:连接对象指针,关闭连接释放资源。


  

三、完整代码

#include<iostream>
#include<mysql.h>
#include<iomanip>using namespace std;int main(void)
{MYSQL* mysql = mysql_init(nullptr);if (!mysql) {cerr << "Error init." << endl;return -1;}mysql = mysql_real_connect(mysql, "127.0.0.1", "root", "root", "test01", 3306, nullptr, 0);if (!mysql) {cerr << "Error connect." << endl;return -1;}mysql_options(mysql, MYSQL_SET_CHARSET_NAME, "gbk");mysql_autocommit(mysql, 0);int ret1 = mysql_query(mysql, "insert into t1 values(6, 'tom', '男', '4287')");int ret2 = mysql_query(mysql, "insert into t1 values(7, 'lucy', '女', '5471')");if (ret1 == 0 && ret2 == 0) {mysql_commit(mysql);}else {mysql_rollback(mysql);}int ret = mysql_query(mysql, "select * from t1");if (ret) {cerr << "Error query." << endl;return -1;}MYSQL_RES* res = mysql_store_result(mysql);if (!res) {cerr << "Error store." << endl;return -1;}int num = mysql_num_fields(res);MYSQL_FIELD* fields = mysql_fetch_fields(res);for (int i = 0; i < num; i++) {cout << left << setw(10) << fields[i].name;}cout << endl;MYSQL_ROW row;while (row = mysql_fetch_row(res)) {for (int i = 0; i < num; i++) {cout << left << setw(10) << row[i];}cout << endl;}mysql_free_result(res);mysql_close(mysql);return 0;
}

  

参考内容:

爱编程的大丙

  

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

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

相关文章

双指针算法详解

目录 一、双指针 二、双指针题目 1.移动零 解法&#xff1a; 代码&#xff1a; 2.复写零 ​编辑 解法&#xff1a; 代码&#xff1a; 边界情况处理: 3.快乐数 ​编辑 解法:快慢指针 代码&#xff1a; 4.盛水最多的容器 解法&#xff1a;&#xff08;对撞指针&#xff09;…

【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(三)

****非斜体正文为原文献内容&#xff08;也包含笔者的补充&#xff09;&#xff0c;灰色块中是对文章细节的进一步详细解释&#xff01; 3.2 全局解释&#xff08;Global Explanation&#xff09; 与旨在解释模型个体预测的局部解释不同&#xff0c;全局解释提供了对语言模型…

STM32G431收发CAN

1.硬件连接 PB8作为CAN_RX&#xff0c;PB9作为CAN_TX&#xff0c;连接一个CAN收发器TJA1051T/3 2. CubeMX里配置CAN 设置连接FDCAN1的参数&#xff0c;使用1个标准过滤器&#xff0c;波特率位500K 使能FDCAN1的中断 3 自动生成代码 3.1 初始化 static void MX_FDCAN1_In…

设计心得——流程图和数据流图绘制

一、流程图和数据流图 在软件开发中&#xff0c;画流程图和数据流图可以说是几乎每个人都会遇到。 1、数据流&#xff08;程&#xff09;图 Data Flow Diagram&#xff0c;DFG。它可以称为数据流图或数据流程图。其主要用来描述系统中数据流程的一种图形工具&#xff0c;可以将…

普及组集训数据结构--并查集

P1551 亲戚 - 洛谷 | 计算机科学教育新生态 并查集就是把所有相关联的量串成一串珠子&#xff0c;抽象来说就是&#xff1a; 把此类相关联的量当作节点&#xff0c;两个节点之间连接一条无向边&#xff0c;所形成的图 例题算法流程&#xff1a; 在此定义“族长”就是一个树的…

路由基本配置实验

路由器用于实现不同类型网络之间的互联。 路由器转发ip分组的基础是路由表。 路由表中的路由项分为直连路由项、静态路由项和动态路由项。 通过配置路由器接口的ip地址和子网掩码自动生成直连路由项。 通过手工配置创建静态路由项。 热备份路由器协议允许将由多个路由器组…

17爬虫:关于DrissionPage相关内容的学习01

概述 前面我们已经大致了解了selenium的用法&#xff0c;DerssionPage同selenium一样&#xff0c;也是一个基于Python的网页自动化工具。 DrissionPage既可以实现网页的自动化操作&#xff0c;也能够实现收发数据包&#xff0c;也可以把两者的功能合二为一。 DressionPage的…

计算机网络•自顶向下方法:网络层介绍、路由器的组成

网络层介绍 网络层服务&#xff1a;网络层为传输层提供主机到主机的通信服务 每一台主机和路由器都运行网络层协议 发送终端&#xff1a;将传输层报文段封装到网络层分组中&#xff0c;发送给边缘路由器路由器&#xff1a;将分组从输入链路转发到输出链路接收终端&#xff1…

下载linux aarch64版本的htop

htop代码网站似乎没有编译好的各平台的包&#xff0c;而自己编译需要下载一些工具&#xff0c;比较麻烦。这里找到了快速下载和使用的方法&#xff0c;记录一下。 先在linux电脑上执行&#xff1a; mkdir htop_exe cd htop_exe apt download htop:arm64 # 会直接下载到当前目…

呼叫中心中间件实现IVR进入排队,判断排队超时播放提示音

文章目录 [TOC](文章目录) 前言需求排队结束原因 联系我们实现步骤1. 调用http接口返回动作2. 启用拨号方案 前言 需求 呼叫中心需要实现调用IVR接口进入排队&#xff0c;如果是因为等待超时导致退出排队的&#xff0c;那就播放一段提示音再挂断通话&#xff1b;其他的情况就…

如何二次封装组件(vue3版本)

在开发 Vue 项目中我们一般使用第三方组件库进行开发&#xff0c;如 Element-Plus, 但是这些组件库提供的组件并不一定满足我们的需求&#xff0c;这时我们可以通过对组件库的组件进行二次封装&#xff0c;来满足我们特殊的需求。 对于封装组件有一个大原则就是我们应该尽量保…

【74HC192减法24/20/72进制】2022-5-17

缘由用74ls192设计一个72进制的减法计数器&#xff0c;需要有逻辑电路图-硬件开发-CSDN问答

Fastapi项目通过Jenkins2.4.91自动化构建部署到Nginx1.20进行访问详细方法(完全自动化部署亲测可用)

这篇技术文章需要结合我写的前两篇文章来一起看Gitlab17.7Jenkins2.4.91实现Fastapi/Django项目持续发布版本详细操作(亲测可用) 和 Pycharm2024.3Gitlab.17.7本地化部署和自动提交代码使用方法&#xff08;亲测可用&#xff09;&#xff0c;总体来说是三部曲。这篇文章详细解读…

iOS 11 中的 HEIF 图像格式 - 您需要了解的内容

HEIF&#xff0c;也称为高效图像格式&#xff0c;是iOS 11 之后发布的新图像格式&#xff0c;以能够在不压缩图像质量的情况下以较小尺寸保存照片而闻名。换句话说&#xff0c;HEIF 图像格式可以具有相同或更好的照片质量&#xff0c;同时比 JPEG、PNG、GIF、TIFF 占用更少的设…

DATACOM-DHCP-复习-实验

DHCP 概述工作原理DHCP分配机制 配置配置基于全局地址池的DHCP服务器配置DHCP Relay中继验证 实验配置DHCP中继 参考 概述 动态主机配置协议DHCP&#xff08;Dynamic Host Configuration Protocol&#xff09;是一种网络管理协议&#xff0c;用于集中对用户IP地址进行动态管理和…

深入浅出 Beam Search:自然语言处理中的高效搜索利器

Beam Search 技术详解 搜索系列相关文章&#xff08;置顶&#xff09; 1.原始信息再加工&#xff1a;一文读懂倒排索引 2.慧眼识词&#xff1a;解析TF-IDF工作原理 3.超越TF-IDF&#xff1a;信息检索之BM25 4.深入浅出 Beam Search&#xff1a;自然语言处理中的高效搜索利器 1…

二、CSS基础

一、选择器(1) 大白话&#xff1a;我们人为认为的解析方式是&#xff0c;从左往右查找&#xff0c;对于浏览器来说&#xff0c;是从右往左查找&#xff0c;解析速度更高。 注&#xff1a; 伪类选择器 - 作用于实际存在的元素&#xff0c;用于描述元素的某种特定状态或关系&…

从摩托罗拉手机打印短信的简单方法

昨天我试图从摩托罗拉智能手机上打印短信&#xff0c;但当我通过USB将手机连接到电脑时&#xff0c;我在电脑上找不到它们。由于我的手机内存已达到限制&#xff0c;并且我想保留短信的纸质版本&#xff0c;您能帮我将短信从摩托罗拉手机导出到计算机吗&#xff1f; 如您所知&…

Linux终端输入删除键backspace显示^H,输入上下左右键显示^A^B^C^D原理以及详细解决办法!

当我们装完Linux系统之后,我们可能会碰到按下删除键后出现^H这种情况。 同样,输入上下左右键显示^A^B^C^D这种情况。 这是为什么呢? 别急,后面我会说具体解决办法,先来看看这是为什么? 一、终端程序架构 首先,我们需要了解终端程序架构。 终端程序架构分为三层,分别…

ESP32 I2S音频总线学习笔记(一):初识I2S通信与配置基础

文章目录 简介为什么需要I2S&#xff1f;关于音频信号采样率分辨率音频声道 怎样使用I2S传输音频&#xff1f;位时钟BCLK字时钟WS串行数据SD I2S传输模型I2S通信格式I2S格式左对齐格式右对齐格式 i2s基本配置i2s 底层API加载I2S驱动设置I2S使用的引脚I2S读取数据I2S发送数据卸载…