c++ 连接mysql数据库

这篇具有很好参考价值的文章主要介绍了c++ 连接mysql数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

1. 配置连接环境

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

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

2.找到include,和lib文件,include文件是包含的头文件,lib文件是包含的库文件c++ 连接mysql数据库

 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

c++ 连接mysql数据库

         3. 到 链接器 中的 输入 中的 附加依赖项中 加入 libmysql.lib 的依赖:c++ 连接mysql数据库

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

c++ 连接mysql数据库

 

连接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句柄类

1 MYSQL mysql;

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

2.MYSQL_RES查询结果集

2 MYSQL_RES * res=nullptr;

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

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

3. MYSQL_ROW row

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

4.获取查询结果集

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

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

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

5.读取结果集

1 mysql_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):返回错误的编号

代码使用的例子文章来源地址https://www.toymoban.com/news/detail-431927.html

#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() 获取结果集中的一行数据,
	//成功:返回记录当前行中每个字段的值,失败:返回一个null
	while (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;
}

到了这里,关于c++ 连接mysql数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c++ 连接mysql数据库

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

    2024年02月02日
    浏览(48)
  • C++连接mysql数据库

    目录 一、准备 二、读取数据 三、修改数据 参考博客 mysql安装及操作 首先在本地下载mysql数据库,或者使用在线数据库,在数据库中创建一个表,往表里填入数据,不然无法读取到数据。运行代码前,将libmysql的静态库和动态库拷贝到代码路径,c++工程的包含路径配置成mys

    2024年02月15日
    浏览(49)
  • C++实现MySQL数据库连接池

    MySQL数据库编程、单例模式、STL容器、C++11多线程(线程互斥、线程互斥、线程同步通信和unique_lock)、智能指针shared_ptr、lambda表达式、生产者-消费者线程模型。 为了提升MySQL数据库(基于C/S设计(客户端-服务器))的访问瓶颈,除了在服务器端增加缓冲服务器缓存常用的数

    2024年02月16日
    浏览(50)
  • Windows远程连接linux中mysql数据库

     我没有mysql并且没有把mysql配置到环境变量中,所以现在我要下载mysql Mysql官网下载地址:https://downloads.mysql.com/archives/installer 1. 选择设置类型 双击运行mysql-installer-community-8.0.26.msi,这里选择是开发者默认模式,所以直接选择“Developer Default”,点击“Next”      默认3306的端

    2024年02月12日
    浏览(46)
  • IntelliJ IDEA无公网远程连接Windows本地Mysql数据库提高开发效率

    🔥 博客主页 : 小羊失眠啦. 🎥 系列专栏 : 《C语言》 《数据结构》 《Linux》 《Cpolar》 ❤️ 感谢大家点赞👍收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 IDEA作为Java开发最主力的工具,在

    2024年02月05日
    浏览(76)
  • 【MySQL】使用DBeaver数据库管理工具进行MySQL数据库连接

    一、数据库连接信息填写 1、服务器地址:填写服务器部署的地址,以及端口号 2、数据库:sys 3、用户名:root 4、密码:服务器上面设置的具体密码 以上信息填写错误的报错提示 :Access denied for user ‘XXX’@’%’ to database ‘10.42.67.22’ 二、数据库说明 1、数据库连接时选择的

    2024年02月09日
    浏览(91)
  • 使用python连接mysql数据库

    第一章 Python 机器学习入门之连接mysql数据库 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 在控制台输入如下: 代码如下(示例): 演示

    2024年02月16日
    浏览(68)
  • 实例讲解C++连接各种数据库,包含SQL Server、MySQL、Oracle、ACCESS、SQLite 和 PostgreSQL、MongoDB 数据库

      C++ 是一种通用的编程语言,可以使用不同的库和驱动程序来连接各种数据库。以下是一些示例代码,演示如何使用 C++ 连接 SQL Server、MySQL、Oracle、ACCESS、SQLite 和 PostgreSQL、MongoDB 数据库。 连接 SQL Server 数据库 要使用 C++ 连接 SQL Server 数据库,可以使用 Microsoft 的 ADODB 库。以

    2024年02月05日
    浏览(66)
  • 使用eclipse连接mysql数据库步骤

    1.导入连接MySQL数据库驱动包(例如mysql-connector-java-5.1.7-bin.jar),并测试。 步骤: 1)在eclipse里面点击右上角的图标,如下图所示。 2)选中Database Connections右键,点new。 3)选择MySQL,点击next。 4)如图所示: 2.引用MySQL驱动包jar 在项目右键一个文件夹lib,把驱动包复制进去,

    2024年02月11日
    浏览(68)
  • 使用C#连接MySQL数据库(详解)

    ✨前言✨ 本片文章,主要在于C#连接MySQL数据库,由于这之间无法建立直接联系,这时候就涉及到了第三方连接工具.NET,以此来建立C#与MySQL数据库的连接 🍒欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍒博主将持续更新学习记录收获,友友们有任何问题可以在评论区留

    2024年02月05日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包