c++ 连接mysql数据库

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

        使用vs2019对window11中的数据库进行连接

1. 配置连接环境

        首先需要把mysql中的头文件和库文件放入到c++项目工程中

1.打开安装MySQL的目录,在windows系统中如果是默认路径,应该和我的是一样的:C:\Program Files\MySQL\MySQL Server 8.0

2.找到include,和lib文件,include文件是包含的头文件,lib文件是包含的库文件

 3.在创建的c++工程中加入include,lib文件路径,按一下步骤

        1.工程中的项目找到属性

        2.到 VC++ 目录 中的包含目录和库目录分别加入include文件和lib文件的路径,

                这是我的路径:include文件路径:C:\Program Files\MySQL\MySQL Server 8.0\include

                                         lib文件路径:C:\Program Files\MySQL\MySQL Server 8.0\lib

         3. 到 链接器 中的 输入 中的 附加依赖项中 加入 libmysql.lib 的依赖:

         4.还需要把下图中的 libmysql.dll 的文件复制到 C:\Windows\System32 目录中

 

连接mysql可以参考 mysql参考手册 进行查看

2.代码实现连接

        1. mysql_read_connect函数,连接成功会返回MYSQL*连接句柄,返回得值与第一个参数得值相同,连接失败返回一个null:

mysql_real_connect(MYSQL *mysql,   ///< 数据库句柄const char *host, ///< 主机名const char *user, ///< 用户名const char *passwd,///< 密码const char *db, ///< 数据库名unsigned int port, ///< 端口号(MySQL为3306)const char *unix_socket,///< unix_socket–unix连接方式,为NULL时表示不使用socket或管道机制unsigned long clientflag ///< clientflag–Mysql运行为ODBC数据库的标记,一般取0);

        例子:

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>
#include<mysql.h>
#include<time.h>
#include<stdlib.h>int main()
{int sr;srand((unsigned)time(NULL));sr = rand() % 50 + 1;//固定不变的MYSQL mysql;    //一个数据库结构体  MYSQL_RES* res; //一个结果集结构体MYSQL_ROW row; //char** 二维数据,存放一条条记录//初始化数据库mysql_init(&mysql);//设置编码方式mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk");//连接数据库                    //ip地址	   //用户名 //密码       //数据库名if (mysql_real_connect(&mysql, "localhost", "root", "Z20020803", "box_man", 3306, NULL, 0) == NULL){printf("错误原因:%s\n", mysql_error(&mysql));printf("连接失败\n");exit(-1);}//往数据库中插入一个随机数char* str1 = "insert into rand values(";char sql_insert[200];sprintf(sql_insert, "%s%d%s", str1, sr, ")");mysql_query(&mysql, sql_insert); //sql语句提交//查询数据mysql_query(&mysql, "select * from rand");//获取结果集res = mysql_store_result(&mysql);//给ROW赋值,判断ROW是否为空,不为空就打印数据while (row = mysql_fetch_row(res)){printf("%s\n", row[0]);}//释放结果集mysql_free_result(res);//关闭数据库mysql_close(&mysql);//停留等待system("pause");return 0;}

        使用c++语句对数据库进行增删改查,在使用c++中string类型时,需要把string类型转换为c中的类型,使用mysql_query函数把sql语句提交,查询成功返回0,结果会被保存到mysql对象中,查询失败会返回非0值:

#define _CRT_SECURE_NO_WARNINGS#include<iostream>
#include<mysql.h>
#include<string>
using namespace std;int main()
{MYSQL mysql;MYSQL_RES* res;MYSQL_ROW row;mysql_init(&mysql);if (mysql_real_connect(&mysql, "localhost", "root", "Z20020803", "box_man", 3306, NULL, 0) == NULL){printf("错误提示:%s\n", mysql_error(&mysql));printf("连接失败\n");}//设置字符集mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk");string str1 = "alter table tb_77 modify sex varchar(20);";//修改表类型失败mysql_query(&mysql, str1.c_str());string str = "insert into tb_77 values(5,'sdmqy','h');";//增加数据成功,不可以增加汉字mysql_query(&mysql, str.c_str());printf("%s", str.c_str());string str2 = "delete from tb_77 where sex = '女';";//删除数据成功mysql_query(&mysql, str2.c_str());string str3 = "update tb_77 set name = 'ttb' where id = 2;";//更改也行mysql_query(&mysql, str3.c_str());mysql_close(&mysql);return 0;
}

        各个类说明:

1.  mysql句柄类

1MYSQL mysql;

        该类在c++中操作数据库都要使用到

2.MYSQL_RES查询结果集

2MYSQL_RES * res=nullptr;

        用来保存查询到的所有结果

3.MYSQL_ROW获取结果集中的内容

3.MYSQL_ROW row

        该变量可以获取到结果集中的数据,并且输出

4.获取查询结果集

1mysql_store_result(查询结果集变量)
2mysql_use_result(查询结果集变量)

        第一种调用mysql_store_result(查询结果集变量),把mysql数据库中指定的表的数据全部进行保存,把服务端得数据保存到客户端

        第二种调用mysql_use_result(查询结果集变量),初始化检索,方便后面一行一行读取结果集,速度快,占用内存少,但是会阻止其它线程使用,

5.读取结果集

1mysql_fetch_row(查询结果集)

        从结果集中获取到一行数据,有数据保存改行的每个字段值,没有返回一个null

3.一些函数说明

        1.mysql_num_fields(MYSQL_RES*)

                该函数可以拿表中的列数,返回值是一个unsigned类型

        2.mysql_fetch_fields(MYSQL_RES*)

                该函数可以拿到表中每一列的字段名,返回的是一个结构体数组

        3.mysql_fetch_lengths(MYSQL_RES*)

                该函数拿到行中每一列的字段长度,返回结果是一个unsigned类型

        4.mysql_free_result(MYSQL_RES*)

                该函数释放结果集

        5.事务设置:
        在mysql中事务是默认自动提交的,如果需要提交的事务多,对我们的操作会有影响,所以需要设置事务为手动提交

  • mysql_autocommit(MYSQL* , mode)  设置事务是否自动提交函数

        参数:mode如果为“1”,自动提交,为“0”为手动提交   返回值:提交成功返回0,否则返回非0

  • mysql_commit(MYSQL* mysql)  事务提交函数

        返回值:成功返回0,否则返回非0

  • mysql_rollback(MYSQL* mysql)  事务回滚函数

        返回值:成功返回0,否则返回非0

        6.打印错误信息:

  • const char* mysql_error(MYSQL* mysql):返回错误信息的描述
  • const char* mysql_errno(MYSQL* mysql):返回错误的编号

代码使用的例子

#define _CRT_SECURE_NO_WARNINGS#include<iostream>
#include<mysql.h>
using namespace std;int main()
{//创建句柄MYSQL mysql;//创建数据集变量MYSQL_RES* res = nullptr;//创建结果集变量MYSQL_ROW row;//创建一个结构体MYSQL_FIELD* field;//初始化数据库句柄mysql_init(&mysql);//设置字符集//mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk");mysql_set_character_set(&mysql, "gbk");//开始连接数据库if (mysql_real_connect(&mysql, "localhost", "root", "Z20020803", "box_man", 3306, NULL, 0)){cout << "连接成功" << endl;}else{cout << "连接失败" << endl;return 0;}//设置事务mysql_autocommit(&mysql, "1");//增加数据string str1 = "insert into tb_912 values(2, 'xiaoming', '李四');";char ssql[1024];//使用sprintf拼出来的语句是一个标准的c语言字符串,可以使用该函数插入变量值sprintf(ssql, "insert into tb_912 values(%d, '%s', '%s');", 3, "daming", "17777777772");if (mysql_query(&mysql, ssql))//该语句提交成功返回0,失败放回1{cout << "提交失败" << endl;}else{cout << "提交成功" << endl;}//提交语句mysql_query(&mysql, str1.c_str());//删除数据string str3 = "delete from tb_912 where id = 2;";mysql_query(&mysql, str3.c_str());//修改数据string str4 = "update tb_912 set name = '张三' where id = 1;";mysql_query(&mysql, str4.c_str());//查询数据string str2 = "select * from tb_912;";mysql_query(&mysql, str2.c_str());//事务提交mysql_commit(&mysql);//获取里面的结果集res = mysql_store_result(&mysql);//拿到结果集得列数,调用的是 mysql_store_result() 的返回值,unsigned int a = mysql_num_fields(res);cout <<"表得列数:"<< a << endl;//使用 mysql_fetch_fields() 函数获取列的名字,返回的是一个结构体数组field = mysql_fetch_fields(res);for (unsigned i = 0; i < a; i++){cout << "当前列的名字:" << field[i].name << endl;//取出名字}unsigned long* lengths;//从结果集中获取到数据 mysql_fetch_row() 获取结果集中的一行数据,//成功:返回记录当前行中每个字段的值,失败:返回一个nullwhile (row = mysql_fetch_row(res)){printf("%s %s %s \n", row[0], row[1], row[2]);//获取列中字段的长度lengths = mysql_fetch_lengths(res);//返回的是一个数组地址for (unsigned int i = 0; i < a; i++){cout << "当前列的长度:" << lengths[i] << endl;//列数会构成一个数组}}//释放结果集mysql_free_result(res);//关闭mysql实例mysql_close(&mysql);return 0;
}

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

相关文章

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;这也是我对本专栏的…

如何用示波器测量输出阻抗

本文介绍了测量函数信号发生器、放大器或其他电路的输出阻抗的方法。这种方法适用于频率较低的场景&#xff0c;并不适应于所有的电路类型。本实验中用低频&#xff08;1k Hz)的正弦波测量。 本文以汉泰的 DSO8060 为例&#xff0c;测量其输出阻抗&#xff0c;该示波器带有信号…

什么是阻抗?影响阻抗的因素有哪些?

问 什么是阻抗&#xff1f; 答 在具有电阻、电感和电容的电路里&#xff0c;对电路中的电流所起的阻碍作用叫做阻抗。 问 什么是阻抗匹配&#xff1f; 答 阻抗匹配是指信号源或者传输线跟负载之间达到一种适合的搭配。阻抗匹配主要有两点作用&#xff0c;调整负载功率和…

为什么阻抗匹配是输入阻抗与输出阻抗相等?

要说明什么是阻抗匹配&#xff0c;首先要知道有这么两个概念&#xff1a;输入阻抗和输出阻抗&#xff0c;那么什么是输入阻抗和输出阻抗呢&#xff1f; 输入阻抗Zin是由电阻或设备输入端看进去的阻抗。 而输出阻抗Zout是由设备输出端看过去的阻抗。任意电阻或设备的输出可以等…