C++连接mysql数据库并读取数据

article/2025/10/23 5:32:19

1、需要包含mysql API的头文件

如果需要连接都本地的mysql数据库,前提是本地要已经安装了mysql数据库。这里要用到一些mysql的API,比如连接数据库、执行查询语句等操作,这些接口都包含在下面的头文件中:

#include <mysql/mysql.h>

2、连接mysql具体步骤

这里大致可以分为四个主要步骤:

  • 1、连接mysql数据库
    显然,如果要获取mysql数据中数据,首先要连接数据库,获得一个可以操作数据库的句柄
  • 2、执行查询语句,即选择我们需要的数据
    就是执行查询语句,查询我们需要的数据。查询到的数据会保存在一个叫做结果集的地方。
  • 3、从结果集中获取需要的数据
    利用相关的接口函数,从结果集中获取每一行各地字段的数据。
  • 4、从结果集中提取每行各个字段的信息
  • 5、释放资源,包括结果集合mysql句柄
    下面具体讲解一下几个必须用到的关键接口函数。

2.1 mysql_real_connect

该函数用于连接运行在主机上的数据库引擎,如果连接成功,将获得可以操作数据库的句柄,否则返回NULL指针。

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结构的地址。调用mysql_real_connect()之前,必须调用mysql_init()来初始化MYSQL结构。
host:是主机名或IP地址。如果“host”是NULL或字符串"localhost",连接将被视为与本地主机的连接。
user:用户的MySQL登录ID。如果“user”是NULL或空字符串"",用户将被视为当前用户。
passwd:用户的密码。如果“passwd”是NULL,仅会对该用户的(拥有1个空密码字段的)用户表中的条目进行匹配检查。
db:是数据库名称。如果db为NULL,连接会将默认的数据库设为该值。
port:如果“port”不是0,其值将用作TCP/IP连接的端口号。注意,“host”参数决定了连接的类型。
unix_socket:如果unix_socket不是NULL,该字符串描述了应使用的套接字或命名管道。注意,“host”参数决定了连接的类型。
client_flag:值通常为0

2.2 mysql_query 或 mysql_real_query

该函数用于向数据库发送一条查询命令,并让数据库执行。返回0表示查询成功,否则失败。

int mysql_query(MYSQL *mysql, const char *stmt_str)

或者:

int
mysql_real_query(MYSQL *mysql,const char *stmt_str,unsigned long length)

mysql:为通过获取到的mysql操作句柄。
stmt_str:表示需要执行的查询语句。
length:为查询语句的长度。
上面两个函数的区别在于:

  • mysql_query() 不能用于执行带二进制的语句,也就是参数stmt_str中不能有二进制数据,会被解析成字符。
  • mysql_query查速度稍慢一些,因为需要计算查询语句的长度

2.3 获取结果集mysql_store_result

该函数返回查询成功的结果集,如果失败则返回NULL

MYSQL_RES *mysql_store_result(MYSQL *mysql)

2.4 显示结果集中每行数据

该函数的入参为步骤(3)中返回的结果集。每次调用时,返回结果集中的下一行数据,并将指针向后移动一行,如果没有下一行数据,返回NULL。
可以用mysql_num_fields(result)计算结果集中行的数量,mysql_num_fields(result)可以计算列的数量。假如row为某一行的信息,那么row[0]、row[1]。。。依次该行的各个字段信息。

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)

3、一个编程示例

这里的环境为linux系统。用到本地数据库名称为:CrashCourse,查询的表名称为products,下面的编程实例中,演示了查询products表中价钱大于30的所有项目。products表格完整内容如下:
在这里插入图片描述

#include <stdio.h>
#include <mysql/mysql.h>
#include <iostream>
using namespace std;MYSQL mysql;  //mysql连接
MYSQL_RES* res; //结果集结构体   
MYSQL_ROW row; //char** 二维数组,存放记录  int main()
{	// 步骤1: 初始化并连接数据库,获得操作数据库的句柄mysql_init(&mysql);    //初始化if (!(mysql_real_connect(&mysql, "localhost", "root", "root", "CrashCourse", 0, NULL, 0))) {cout << "Couldn't connect to Database!\n : " << mysql_error(&mysql);exit(1);}else {printf("Database connection succeeded. Connected...\n\n");}// 步骤2: 执行查询语句,查询需要的数据(设置编码格式也相当于执行特殊的查询语句)mysql_query(&mysql, "set names gbk"); // 设置编码格式mysql_query(&mysql, "SELECT * from products where prod_price > 30");// 步骤3:获取结果集res = mysql_store_result(&mysql);// 步骤4:显示结果集中每行数据int cols = mysql_num_fields(res); // 计算结果集中,列的个数while (row = mysql_fetch_row(res)) {for (int i = 0; i < cols; ++i) {cout << row[i] << "\t";}cout << endl;}// 步骤5:释放结果集合mysql句柄mysql_free_result(res);mysql_close(&mysql);return 0;}

查询结果如下:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/qWkXspoa.shtml

相关文章

【MySQL】------数据库连接

分享第十九条励志语录 要想飞起来&#xff0c;首先要有飞翔的信念&#xff0c;如果没有这个信念&#xff0c;永远不可能飞起来。但只要有了飞翔的信念&#xff0c;再加上自己的努力&#xff0c;就有可能能够飞起来。成功也是这样&#xff0c;要想成功&#xff0c;首先得有成功的…

mysql 编码种类_MySQL 编码

编码的种类 SHOW VBRIABLES LIKE %character%; 1) character_set_client : MySQL Server 假定client传输数据过来的时候的编码 2) character_set_connection: Server收到SQL语句时,将其转换成的编码 3) character_set_results: Server在返回数据给客户端时,会将数据转成这个编码…

c++ 连接mysql数据库

使用vs2019对window11中的数据库进行连接 1. 配置连接环境 首先需要把mysql中的头文件和库文件放入到c项目工程中 1.打开安装MySQL的目录&#xff0c;在windows系统中如果是默认路径&#xff0c;应该和我的是一样的&#xff1a;C:\Program Files\MySQL\MySQL Server 8.0 2.找…

Mysql 数据库(一)—— 初识 Mysql

文章目录 Mysql 数据库&#xff08;一&#xff09;—— 初识 Mysql一、数据库1. 什么是数据库&#xff1f;2.数据库与数据结构3.数据库软件4.关于Mysql5.Mysql 学习内容6.Mysql 的安装 二、Mysql 详细操作1.学习 SQL 语句2.关于数据库的操作&#xff1a;(1) 查看数据库(2) 创建…

MySQL数据库编码

1 MySQL数据库编码解析 登录MySQL之后&#xff0c;输入如下命令来查询数据库编码&#xff0c; show variables like "char%";可得到如下查询结果&#xff0c; 查询结果所含信息如下&#xff0c; ①character_set_client&#xff1a;utf8&#xff0c;表示MySQL的…

编程语言的类型

解释型语言和编译型语言 解释型语言是把源代码的每一条语句在运行时通过解释器编译成机器语言&#xff08;按语句编译&#xff0c;边说边翻译&#xff09; 编译型语言是将整个源程序代码一次性编译成机器码&#xff0c;机器最直接读这个机器码文件&#xff08;一次性编译&…

编程语言发展简史

编程语言发展简史 一、编程的起源二、第一代计算机语言——机器语言三、第二代计算机语言——汇编语言四、第三代计算机语言——高级语言2022年4月[TIOBE编程排行榜](https://www.tiobe.com/tiobe-index/)高级语言的分类&#xff1a;1.解释型和编译型2.面向过程和面向对象 一、…

常见的十几种编程语言介绍

作为一名小白,在刚接触编程的时候,常常不了解这些编程语言具体有什么用途,或者说不知道应该学习哪种语言能实现自己想要从事的IT领域方向,于是,结合自身学习经验以及资料查找,我整理了一些常见的编程语言的介绍,帮助大家认识了解编程语言的特点、用途,从而快速明确学习…

学生的第一门编程语言应该是什么?

“学生第一次开始学习计算机科学(computer science&#xff0c;CS)时&#xff0c;应该从哪种编程语言开始学习?”这一问题一直让教育工作者备受困扰。来自密歇根大学的计算机科学教授 Mark Guzdial 也对此进行了大量思考与研究&#xff0c;然而其近期发表在《ACM 通讯》上的一…

编程语言是怎么发展的?

说到编程语言&#xff0c;我们通常会想到JAVA、C#之类的。不知道你有没有好奇过&#xff0c;编程语言到底是怎么发展而来的。别急&#xff0c;听小编慢慢道来。 编程语言的定义为计算机和人都能识别的语言&#xff0c;通过编程语言&#xff0c;程序员将指令发给计算机&#xf…

如果编程语言是一门武功绝学

学习编程与武功绝学 武侠小说中,各路侠客绿林好汉都是从基本功开始一招一式学起,掌握了足够多的招式后,加之勤学苦练,量变引起质变,会有一天打开任督二脉顿悟出这些招式背后的哲学逻辑,成为一代宗师。在编程的学习过程中,我们何尝不是从一招一式的函数、语法、特性等学…

什么是 Python 编程语言?

Python&#xff1a;是世界上最流行的解释型编程语言之一。Python 由 Guido van Rossum 设计&#xff0c;作为“ABC”编程语言的继承者&#xff0c;于 1991 年首次发布。它是一种高级通用语言&#xff0c;其设计理念是通过使用缩进来强调代码的可读性。Python 的语言结构旨在帮助…

世界上到底有多少种编程语言

今天在找选题的时候&#xff0c;发现一篇《世界上最不流行的编程语言》。程序员常常讨论世界上最流行的编程语言有哪些&#xff0c;各种编程语言排行榜也会定时发布出来&#xff0c;例如Python、JavaScript、Java这些耳熟能详&#xff0c;排在各大榜单前列的流行编程语言&#…

Python 编程语言

&#x1f482; 个人网站: 海拥 —— 一个乐于分享技术与快乐的博主&#x1f91f; 版权: 本文由【海拥】原创、在CSDN首发、需要转载请联系博主&#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦&#x1f485; 想寻找共同摸鱼的小伙伴&#xff0c;…

python是一种编程语言吗?,python语言是编程语言吗

python语言是什么&#xff1f; Python是一种计算机程序设计语言&#xff0c;你可能已经听说过很多流行的编程语言&#xff0c;比如非常难学的C语言&#xff0c;非常流行的Java语言&#xff0c;适合初学者的Basic语言&#xff0c;适合网页编程的JavaScript等&#xff0c;Python…

第一门编程语言,我应该学什么?

作者 | Daniel Bastos 译者 | 弯月 责编 | 郑丽媛 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 软件工程师问我最多的一个问题就是&#xff0c;第一门编程语言应该学什么。这可能是开发人员学习过程中最大的困惑&#xff0c;以至于许多人觉得在得到百分百正确的…

第一门编程语言选谁?

Are You Ready? Go! ——第一门编程语言选谁&#xff1f; 金旭亮 说明&#xff1a; 这篇文章是专门针对大学低年级学生&#xff08;和其他软件开发初学者&#xff09;写的&#xff0c;如果你己经是研究生或本科高年级学生&#xff0c;请将这篇文章转发给你的师弟或师妹&…

输入电阻定义

MOSFET的栅极是绝缘的&#xff0c;所以 i G ≈ 0 i_G \approx 0 iG​≈0&#xff0c;输入阻抗很高 定义&#xff1a;对不含独立电源&#xff08;可以含受控源&#xff09;的端口网络&#xff0c;定义端口的电压和电流之比为该端口网络的输入电阻&#xff08;入端电阻&#xf…

关于电路中输入阻抗和输出阻抗大小的讨论

前言 很多同学搞不清楚为什么说输入、输出阻抗大小是大好还是小好&#xff0c;在这里我要简单概述一下。对于输入阻抗来说&#xff0c;输入阻抗越大越好&#xff0c;因为这样落到放大器上的电压就越大&#xff0c;更接近信号源电压&#xff08;信号源内阻索取的就越小&#xf…

阻抗匹配的简单理解

阿尔伯特爱因斯坦声称&#xff1a;“科学的大多数基本思想本质上都很简单&#xff0c;并且通常可以用每个人都能理解的语言来表达。” 我不确定 21 世纪的物理学是否仍然如此&#xff08;试着找一个能简单解释超弦理论的人&#xff09;。尽管如此&#xff0c;这也是我对本专栏的…