C++中使用MySQL数据库


因为项目需要使用C++的方式调用MySQL数据库,因为以前使用的都是Qt的数据库类,因此在网上查阅相关资料后,特整理一下使用方法。(下方的“类”和“结构体”我统称为类,个人习惯)

1. 安装MySQL

这一步就不多说了,网上教程很多,自行查阅即可。

2. 拷贝include和lib文件夹到C++工程中

打开MySQL的安装目录,拷贝include和lib目录至C++工程,然后在项目中添加包含路径和使用到的附加依赖项。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 正式使用数据库

3.1 范例

话不多说,直接上源码:

#include <iostream>
#include "mysql.h"

using namespace std;

int main(int argc, char *argv[])
{
	///< 创建数据库句柄
	MYSQL mysql;
	//MYSQL *mysql = mysql_init(nullptr);

	///< 初始化句柄
	mysql_init(&mysql);

	///< 连接的数据库(句柄、主机名、用户名、密码、数据库名、端口号、socket指针、标记)
	if (!mysql_real_connect(&mysql, "localhost", "root", "root", "test_mysql", 3306, nullptr, 0))
	{
		cout << "数据库连接失败" << mysql_errno(&mysql) << endl;
		return -1;
	}

	cout << "数据库连接成功" << endl << endl;

	///< 创建数据库回应结构体
	MYSQL_RES *res = nullptr;
	///< 创建存放结果的结构体
	MYSQL_ROW row;

	char sql[1024]{ 0 };
	sprintf_s(sql, 1024, "select * from user_info");

	///< 调用查询接口
	if (mysql_real_query(&mysql, sql, (unsigned int)strlen(sql)))
	{
		cout << "查询失败" << ": "  << mysql_errno(&mysql) << endl;
	}
	else
	{
		cout << "查询成功" << endl << endl;

		///< 装载结果集
		res = mysql_store_result(&mysql);

		if (nullptr == res)
		{
			cout << "装载数据失败" << ": " << mysql_errno(&mysql)  << endl;
		}
		else
		{
			///< 取出结果集中内容
			while (row = mysql_fetch_row(res))
			{
				cout << row[0] << "  "  << row[1] << endl;
			}
		}
	}

	///< 释放结果集
	mysql_free_result(res);

	///< 关闭数据库连接
	mysql_close(&mysql);

	system("pause");

	return 0;
}

因为使用到的函数接口不多,整体过程比较简单,下面介绍使用到的结构体和函数。

3.2 类介绍

3.2.1 MYSQL句柄类

MYSQL mysql;

MYSQL是数据库句柄类,所有数据库相关的操作都会使用到这个句柄。

3.2.2 MYSQL_RES查询结果集

MYSQL_RES *res = nullptr;

MYSQL_RES是数据库的查询结果集类,用于存放调用查询函数之后的结果集。

3.2.3 MYSQL_ROW获取单行内容

MYSQL_ROW row;

实际来说,MYSQL_ROW不是一个类,它本质上是一个指向字符串数组的指针,也就是一个二级指针char**,不过为了方便起见,我就把MYSQL_ROW也放在“类介绍”的范畴之下了。
这个东西的作用是从MYSQL_RES结果集中获得某一行的数据。

3.3 重要接口函数介绍

3.3.1 连接数据库

MYSQL * STDCALL 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;

连接 失败返回0

3.3.2 查询

int STDCALL mysql_real_query(MYSQL *mysql, const char *q, unsigned long length);

这里的查询实际上是广义上的查询操作,名义上是query,实际上可以执行增删改查所有的操作,取决于传入的sql语句的内容。
如:sql = “insert into user_info values(‘user4’, ‘888888’)”;代表的就是执行插入数据的操作。

执行成功返回0

3.3.3 获取查询结果集

MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql);
 
MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql);

获取的方式有两种。
第一种,调用mysql_store_result函数将从Mysql服务器查询的所有数据都存储到客户端,然后读取;
第二种,调用mysql_use_result初始化检索,以便于后面一行一行的读取结果集,而它本身并没有从服务器读取任何数据,这种方式较之第一种速度更快且所需内存更少,但它会绑定服务器,阻止其他线程更新任何表,而且必须重复执行mysql_fetch_row读取数据,直至返回NULL,否则未读取的行会在下一次查询时作为结果的一部分返回。
故经常我们使用mysql_store_result。

3.3.4 读取结果集数据

MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);

其中参数为MYSQL_RES类型的结果集。

4. 结果演示

在这里插入图片描述

在这里插入图片描述

参考链接

参考链接1
参考链接2
MySQL错误码

  • 22
    点赞
  • 131
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
你好!关于使用Dev-C++连接MySQL数据库的问题,你可以按照以下步骤进行操作: 1. 首先,确保已经安装了MySQL数据库,并且知道数据库的相关信息,如主机名、用户名、密码等。 2. 在Dev-C++创建一个新项目,并添加MySQL的头文件和库文件。你可以从MySQL的官方网站下载并安装MySQL Connector/C++,然后将其添加到Dev-C++项目。 3. 在代码包含MySQL Connector/C++的头文件。例如: ```cpp #include <mysql_driver.h> #include <mysql_connection.h> ``` 4. 在代码使用MySQL Connector/C++提供的方法连接到MySQL数据库。例如: ```cpp sql::mysql::MySQL_Driver *driver; sql::Connection *con; // 获取MySQL连接驱动 driver = sql::mysql::get_mysql_driver_instance(); // 连接到MySQL数据库 con = driver->connect("tcp://127.0.0.1:3306", "username", "password"); ``` 请将上面的"username"和"password"替换为你实际的数据库用户名和密码,"tcp://127.0.0.1:3306"替换为你的数据库主机和端口。 5. 成功连接到数据库后,你可以执行SQL查询和其他操作。例如: ```cpp sql::Statement *stmt; sql::ResultSet *res; stmt = con->createStatement(); res = stmt->executeQuery("SELECT * FROM your_table"); while (res->next()) { // 处理查询结果 std::cout << res->getString(1) << std::endl; } delete res; delete stmt; ``` 记得在程序结束时关闭数据库连接: ```cpp con->close(); delete con; ``` 这就是在Dev-C++使用MySQL数据库的基本步骤。希望对你有所帮助!如果你还有其他问题,可以继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值