MySql教程

【c++链接mysql系列】vs下c++与mysql的入门使用demo

本文主要是介绍【c++链接mysql系列】vs下c++与mysql的入门使用demo,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录一览

  • 一、新建项目并且添加依赖
      • 1、新建c++空项目,将版本修改为debug+x64
      • 2、添加环境变量
      • 3、添加c++头文件依赖
      • 4、添加链接器依赖库目录
      • 5、添加链接器输入依赖
  • 二、一个简单测试数据库
      • 1、测试数据库demo
  • 三、数据库链接和查询demo
      • 1、demo的结构
      • 2、demo代码
      • 3、demo测试结果

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

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测试结果

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

这篇关于【c++链接mysql系列】vs下c++与mysql的入门使用demo的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!