C++访问数据库

news2025/1/6 6:23:34

目录

一、主要流程

二、主要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.coloradmin.cn/o/2270714.html

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

相关文章

二维码文件在线管理系统-收费版

需求背景 如果大家想要在网上管理自己的文件&#xff0c;而且需要生成二维码&#xff0c;下面推荐【草料二维码】&#xff0c;这个系统很好。特别适合那些制造业&#xff0c;实体业的使用手册&#xff0c;你可以生成一个二维码&#xff0c;贴在设备上&#xff0c;然后这个二维码…

MySQL8安装与卸载

1.下载mysql MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/mysql/ 2.解压mysql安装包 解压到自己定义的目录&#xff0c;这里解压就是安装&#xff0c;解压后的路径不要有空格和中文。 3.配置环境变量 配置环境变量可以方便电脑在任何的路径…

数据挖掘——关联规则挖掘

数据挖掘——关联数据挖掘 关联数据挖掘关联规则关联规则挖掘问题&#xff1a;具体挖掘过程Apriori 产生关联规则 关联数据挖掘 关联分析用于发现隐藏在大型数据集中的令人感兴趣的联系&#xff0c;所发现的模式通常用关联规则或频繁项集的形式表示。 关联规则反映一个事物与…

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

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

Samsung手机首次主要采用竞对Micron LPDDR5内存

根据韩国媒体《韩国先驱报》&#xff08;The Korea Herald&#xff09;的报道&#xff0c;即将在1月底发布的三星 Galaxy S25 系列智能手机将首次主要使用美光科技&#xff08;Micron Technology&#xff09;提供的移动DRAM&#xff0c;而非三星自家的产品。这一消息对于三星的…

Linux驱动开发学习准备(Linux内核源码添加到工程-Workspace)

Linux内核源码添加到VsCode工程 下载Linux-4.9.88源码&#xff1a; 没有处理同名文件的压缩包&#xff1a; https://pan.baidu.com/s/1yjIBXmxG9pwP0aOhW8VAVQ?pwde9cv 已把同名文件中以大写命名的文件加上_2后缀的压缩包&#xff1a; https://pan.baidu.com/s/1RIRRUllYFn2…

leetcode题目(3)

目录 1.加一 2.二进制求和 3.x的平方根 4.爬楼梯 5.颜色分类 6.二叉树的中序遍历 1.加一 https://leetcode.cn/problems/plus-one/ class Solution { public:vector<int> plusOne(vector<int>& digits) {int n digits.size();for(int i n -1;i>0;-…

vue3+Echarts+ts实现甘特图

项目场景&#xff1a; vue3Echartsts实现甘特图;发布任务 代码实现 封装ganttEcharts.vue <template><!-- Echarts 甘特图 --><div ref"progressChart" class"w100 h100"></div> </template> <script lang"ts&qu…

接受Header使用错Map类型,导致获取到的Header值不全

问题复现 在 Spring 中解析 Header 时&#xff0c;我们在多数场合中是直接按需解析的。例如&#xff0c;我们想使用一个名为 myHeaderName 的 Header&#xff0c;我们会书写代码如下&#xff1a;RequestMapping(path "/hi", method RequestMethod.GET) public Str…

GitHub的简单操作

引言 今天开始就要开始做项目了&#xff0c;上午是要把git搭好。搭的过程中遇到好多好多的问题。下面就说一下git的简单操作流程。我们是使用的GitHub,下面也就以这个为例了 一、GitHub账号的登录注册 https://github.com/ 通过这个网址可以来到GitHub首页 点击中间绿色的S…

【时时三省】(C语言基础)常见的动态内存错误

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 对NULL指针的解引用操作 示例&#xff1a; malloc申请空间的时候它可能会失败 比如我申请一块非常大的空间 那么空间可能就会开辟失败 正常的话要写一个if&#xff08;p&#xff1d;&#x…

【51项目】51单片机自制小霸王游戏机

视频演示效果&#xff1a; 纳新作品——小霸王游戏机 目录&#xff1a; 目录 视频演示效果&#xff1a; 目录&#xff1a; 前言&#xff1a; 一、连接方式&#xff1a; 1.1 控制引脚 1.2. 显示模块 1.3. 定时器 1.4. 游戏逻辑与硬件结合 1.5. 中断处理 二、源码分析&#xff1a…

ESP32-S3遇见OpenAI:OpenAI官方发布ESP32嵌入式实时RTC SDK

目录 OpenAI RTC SDK简介应用场景详解智能家居控制系统个人健康助手教育玩具 技术亮点解析低功耗设计快速响应高精度RTC安全性保障开发者指南 最近&#xff0c;OpenAI官方发布了一款针对ESP32-S3的嵌入式实时RTC&#xff08;实时时钟&#xff09;SDK&#xff0c;这标志着ESP32-…

Elasticsearch:减少 Elastic 容器镜像中的 CVE(常见的漏洞和暴露)

作者&#xff1a;来自 Elastic Maxime Greau 在这篇博文中&#xff0c;我们将讨论如何通过在 Elastic 产品中切换到最小基础镜像并优化可扩展漏洞管理程序的工作流程来显著减少 Elastic 容器镜像中的常见漏洞和暴露 (Common Vulnerabilities and Exposures - CVEs)。 基于 Chai…

计算机网络 (21)网络层的几个重要概念

前言 计算机网络中的网络层是OSI&#xff08;开放系统互连&#xff09;模型中的第三层&#xff0c;也是TCP/IP模型中的第二层&#xff0c;它位于数据链路层和传输层之间&#xff0c;负责数据包从源主机到目的主机的路径选择和数据转发。 一、网络层的主要功能 路由选择&#xf…

LED背光驱动芯片RT9293应用电路

一&#xff09;简介&#xff1a; RT9293 是一款高频、异步的 Boost 升压型 LED 定电流驱动控制器&#xff0c;其工作原理如下&#xff1a; 1&#xff09;基本电路结构及原理 RT9293的主要功能为上图的Q1. Boost 电路核心原理&#xff1a;基于电感和电容的特性实现升压功能。当…

第四届计算机、人工智能与控制工程

第四届计算机、人工智能与控制工程 The 4th International Conference on Computer, Artificial Intelligence and Control Engineering 重要信息 大会官网&#xff1a;www.ic-caice.net 大会时间&#xff1a;2025年1月10-12日 大会地点&#xff1a;中国合肥 (安徽大学磬苑…

【Rust 学习笔记】Rust 基础数据类型介绍——指针、元组和布尔类型

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 博客内容主要围绕&#xff1a; 5G/6G协议讲解 高级C语言讲解 Rust语言讲解 文章目录 Rust 基础数据类型介绍——指针、元组和布尔类型一、元组类型…

YOLO系列的学习

YOLOV1全解 You Only Look Once&#xff0c;把检测问题转化成回归问题&#xff0c;一个CNN就搞定了&#xff01;&#xff01;&#xff01;效率高&#xff0c;可对视频进行实时检测&#xff0c;应用领域非常广&#xff0c;到V3的时被美国军方用于军事行动&#xff0c;作者出于某…

鸿蒙应用开发搬砖经验之—使用DevTools工具调试前端页面

环境说明&#xff1a; 系统环境&#xff1a;Mac mini M2 14.5 (23F79) 开发IDE&#xff1a;DevEco Studio 5.0.1 Release 配置步骤&#xff1a; 按着官方的指引来慢慢一步一步来&#xff0c;但前提是要配置好SDK的路径&#xff08;没有配置的话&#xff0c;可能先看下面的配…