❤️【c++链接mysql系列教程0】vs下c++与mysql的入门使用demo❤️

本文主要讲解了c++连接mysql的配置,展示了一个简单c++实例。

对于实例中所涉及到的MySQL API将在另一篇文章中详细展开,包含MySQL的整个操作流程、API中的主要数据结构、常用库函数以及增删改查的简单实现。

一、新建项目并且添加依赖

1、新建c++空项目,将版本修改为debug+x64

在这里插入图片描述

2、添加环境变量

右键项目选择 属性->调试 -> 环境 ,添加PATH = PATH=E:\software\mysql-8.0.25-winx64\bin(根据自己的安装目录选择)
注意:若没有设置,会报缺少libmysql.dll的错误
在这里插入图片描述

3、添加c++头文件依赖

右键项目选择 属性 -> c/c++ -> 常规 -> 附加包含目录 ,添加E:\software\mysql-8.0.25-winx64\include(根据自己的安装目录选择)
在这里插入图片描述

4、添加链接器依赖库目录

右键项目选择 属性 -> 链接器 -> 常规 -> 附加库目录 ,添加E:\software\mysql-8.0.25-winx64\lib(根据自己的安装目录选择)
在这里插入图片描述

5、添加链接器输入依赖

右键项目选择 属性 -> 链接器 -> 输入 -> 附加依赖项,添加E:\software\mysql-8.0.25-winx64\lib\libmysql.lib(根据自己的安装目录选择)
注意:用分号;隔开。
在这里插入图片描述

二、一个简单测试数据库

1、测试数据库demo

数据库名称:db
表名:user

在这里插入图片描述

三、数据库链接和查询demo

1、demo的结构

|__ main.cpp //demo调用函数
|__ mysqlhelper.cpp //类函数实现
|__ mysqlhelper.h //mysql操作相关类

2、demo代码

|__ mysqlhelper.h:

#ifndef MYSQL_HELPER_H
#define MYSQL_HELPER_H

#include <stdlib.h>

#include <map>
#include <vector>
#include <string>
using namespace std;

#include <mysql.h>

namespace mysqlhelper
{
	// 连接数据库的一些必要信息
	struct ConnectionInfo
	{
		const char* host;            // 主机地址
		const char* user;            // 用户名
		const char* password;        // 密码
		const char*    database;     // 数据库名
		unsigned int port;           // 端口号
		const char*    unix_socket;  // unix连接标识
		unsigned long clientflag;    // 客户端连接标志

		// 构造函数,设置一些默认值
		ConnectionInfo() 
		{
			host = "localhost";
			port = 3306;
			user = "root";
			password = "123456";
			database = "db";
			unix_socket = NULL;
			clientflag = 0;
		}
	};

	class MySQLManager
	{
	public:
		//构造与析构函数
		MySQLManager();
		
		~MySQLManager();

		//数据库链接与释放
		// 连接数据库
		bool Init(ConnectionInfo& info);
		// 释放连接
		bool FreeConnect();

		//数据库增删改查操作
		// 增加数据
		bool InsertData(const char* sql);
		// 删除数据
		bool DeleteData(const char* sql);
		// 更新数据
		bool UpdateData(const char* sql);
		// 执行sql语句, 包括增加、删除、更新数据
		bool ExecuteSql(const char* sql);
		// 查询数据
		MYSQL_RES* QueryData(const char* sql);
		// 打印结果集
		void PrintQueryRes();

	private:
		MYSQL m_mysql;                // mysql连接
		MYSQL_RES* m_res;             // 查询结果集
	};
}
#endif //MYSQL_HELPER_H

|__ mysqlhelper.cpp:

#include <iostream>
#include <string>

#include "mysqlhelper.h"

using namespace std;

namespace mysqlhelper
{
	//构造与析构函数
	MySQLManager::MySQLManager(){
		m_res = NULL;
	}

	MySQLManager::~MySQLManager(){}

	// 初始化
	bool MySQLManager::Init(ConnectionInfo& info)
	{
		// 初始化mysql,连接mysql数据库
		mysql_init(&m_mysql);

		// 连接失败
		if (!(mysql_real_connect(&m_mysql, info.host, info.user, info.password, info.database, info.port, info.unix_socket, info.clientflag)))
		{
			std::cout << "mysql connect fail." << mysql_error(&m_mysql) << std::endl;
			return false;
		}

		std::cout << "mysql connect success."<< std::endl;
		return true;
	}

	// 释放连接
	bool MySQLManager::FreeConnect()
	{
		//释放资源
		mysql_free_result(m_res);
		mysql_close(&m_mysql);
		return false;
	}

	// 执行sql语句, 包括增加、删除、更新数据
	bool MySQLManager::ExecuteSql(const char * sql)
	{
		if (mysql_query(&m_mysql, sql))
		{
			std::cout << "执行sql语句失败,错误信息为: " << mysql_error(&m_mysql) << endl;
			return false;
		}
		else
		{
			std::cout << "执行sql语句成功!" << endl;
		}

		return true;
	}

	// 查询数据
	MYSQL_RES* MySQLManager::QueryData(const char* sql)
	{
		if (mysql_query(&m_mysql, sql))
		{
			// 打错误log,这里直接显示到控制台
			std::cout << "查询语句执行失败,错误信息为: " << mysql_error(&m_mysql) << endl;
			return nullptr;
		}
		else
		{
			std::cout << "查询语句执行成功!" << endl;
		}

		// 存储查询结果
		m_res = mysql_store_result(&m_mysql);

		return m_res;
	}

	// 遍历结果集
	void MySQLManager::PrintQueryRes()
	{
		if (nullptr == m_res || NULL == m_res)
		{
			return;
		}

		// 获取行数
		// unsigned int rows = mysql_affected_rows(m_mysql);

		// 字段列数组
		MYSQL_FIELD* field = nullptr;
		//存字段名二维数组
		char fieldName[64][32];

		// 获取字段名
		for (int i = 0; field = mysql_fetch_field(m_res); ++i)
		{
			strcpy_s(fieldName[i], field->name);
		}

		// 获取列数
		int columns = mysql_num_fields(m_res);
		for (int i = 0; i < columns; ++i)
		{
			// 使用C语言的printf格式化更方便一点
			printf("%10s\t", fieldName[i]);
		}
		cout << endl;

		MYSQL_ROW row;
		while (row = mysql_fetch_row(m_res))
		{
			for (int i = 0; i < columns; ++i)
			{
				printf("%10s\t", row[i]);
			}

			cout << endl;
		}

	}
}

|__ main.cpp:

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

using namespace std;

int main()
{
	mysqlhelper::MySQLManager mysql;
	// 定义ConnectionInfo这个结构体,使用默认值,项目中一般从配置文件这读取
	mysqlhelper::ConnectionInfo info;

	// mysql连接
	if (!mysql.Init(info))
	{
		return -1;
	}
	
	// 增加数据测试
	const char* sql1 = "insert into user values (NULL, 'song', '99')";
	mysql.ExecuteSql(sql1);

	// 删除数据测试
	const char* sql2 = "delete from user where name = 'sun'";
	mysql.ExecuteSql(sql2);

	// 修改数据测试
	const char* sql3 = "update user set grade='22' where name = 'wu'";
	mysql.ExecuteSql(sql3);

	// 查询数据测试
	const char* sql4 = "select * from user";
	mysql.QueryData(sql4);
	mysql.PrintQueryRes();

	// 释放mysql资源
	mysql.FreeConnect();

	system("pause");
	return 0;
}

3、demo测试结果

在这里插入图片描述
-----------------------------------------------------------------------------------------------------------------------------------------------------
如果本文对你有所帮助,请不要忘了点赞、收藏哦!!!
-----------------------------------------------------------------------------------------------------------------------------------------------------

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值