[Mysql | C++] C++中使用Mysql数据库

目录

一、环境安装

二、环境配置

 三、编写程序


一、环境安装

1.Mysql 8.0

2.Microsoft Visual Studio 2017

注意:vs2019版本及以下才支持Mysql,若使用高版本可以使用SQL Server

二、环境配置

1.检查Mysql 8.0的安装文件夹中是否包含include和lib文件夹,若不存在,需要重新安装

2.打开项目属性页面

3.将[调试]中的[环境]改为bin文件夹地址

4.将[c/c++]中的[常规][附加包含目录]改为include文件夹地址

5.将[链接器]下的[常规]中的[附加库目录]改为lib文件夹地址

6.将[链接器]下的[输入]中的[附加依赖项]改为libmysql.lib的地址

7.根据自己的系统位数(64/32)添加libmysql.dll:

(1)从这位博主的网盘获取动态链接库:

32位/64位 libmysql.dll和libmysql.lib下载_libmysql.dll下载_不吃水果的太空人的博客-CSDN博客

(2)以64位为例(我的是64位),把下载好的64位dll放到system32文件夹(存放64位文件),把32位dll放到sysWOW64文件夹(存放32位文件)

(3)在Mysql 8.0的安装文件夹中打开bin,复制libcrypto-1_1-x64.dll和libssl-1_1-x64.dll两个动态链接库,粘贴到system32文件夹中

(4)把64位libmysql.dll放到cpp同目录下

注意:这一步(7)是为了解决我遇到的两个问题,一个是缺少libcrypto-1_1-x64.dll和libssl-1_1-x64.dll两个动态链接库;另一个是“无法定位程序于xxx”。

8.将运行平台改为x64,完成

 三、编写程序

#define _CRT_SECURE_NO_WARNINGS

#include "bits/stdc++.h"
#include "mysql.h"

class Mysql {
private:
	MYSQL mysql;
	MYSQL_RES* res;
public:
	Mysql() {
		res = nullptr;
		mysql_init(&mysql); // init
		mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk"); // 设置编码
	}

	void connectToDatabase(const char* password) {
		// 函数参数自行百度,其中"mysql"是mysql原来就有的数据库,可以暂时连接到它
		if (mysql_real_connect(&mysql, "localhost", "root", password, "mysql", 3306, NULL, 0) != NULL) {
			std::cout << "mysql连接成功" << "\n";
		}
		else {
			std::cout << "mysql连接失败" << "\n";
		}
	}

	void createDatabase(std::string name) {
		std::string query = "create database if not exists " + name + ";";
		if (mysql_query(&mysql, query.c_str()) == 0) { // 0 是能执行
			std::cout << name << "创建成功" << "\n";
		}
		else {
			std::cout << name << "已存在" << "\n";
		}
	}

	void useDatabase(std::string name) {
		std::string query = "use " + name + ";";
		if (mysql_query(&mysql, query.c_str()) == 0) {
			std::cout << "正在使用" + name << "\n";
		}
		else {
			std::cout << "使用失败" << "\n";
		}
	}

	void writeInfo(std::string query) {
		if (mysql_query(&mysql, query.c_str()) == 1) {
			std::cout << "错误原因" << mysql_error(&mysql) << "\n";
			return;
		}

		res = mysql_store_result(&mysql);

		int field_num = mysql_num_fields(res);
		MYSQL_FIELD *field_name = mysql_fetch_fields(res);

		std::cout << "\n";
		for (int i = 0; i < field_num; ++i) {
			std::cout << field_name[i].name << " \n"[i == field_num - 1];
		}

		MYSQL_ROW row;
		while (row = mysql_fetch_row(res)) {
			for (int i = 0; i < field_num; ++i) {
				if (row[i] != NULL) {
					if (strlen(row[i]) > 0) std::cout << row[i] << " ";
					else std::cout << "NULL";
				}
				else std::cout << "NULL" << " ";
			}
			std::cout << "\n";
		}
		std::cout << "\n";
	}
};

signed main() {
	Mysql op;

	// 连接到默认数据库
	op.connectToDatabase("010214");

	// 创建数据库
	op.createDatabase("newDatabase");

	// 使用数据库
	op.useDatabase("newDatabase");

	// ......
}

注意:

1. 代码完成了Mysql类的实现,各个函数自行百度。

2.在 useDatabase() 调用后,就可以根据自己的需要创建表,插入数据等等操作,核心思想就是用 mysql_query(string) 发起请求。

3. writeInfo() 实现了结果集的输出。

4.如果插入的数据量很大,可以自定义结构体莱实现insert,如下:

(具体情况见专栏第二篇https://blog.csdn.net/joyride_run/article/details/130496869

#define _CRT_SECURE_NO_WARNINGS

#include "bits/stdc++.h"

struct TableS {
	std::string sno, sname, city;
	int status;

	TableS() = default;
	TableS(std::string sno, std::string sname, int status, std::string city) {
		this->sno = sno;
		this->sname = sname;
		this->status = status;
		this->city = city;
	}

	static std::string query(TableS t) {
		std::string query = "insert into s(sno, sname, status, city) values('" + t.sno + "', '" + t.sname + "', " + std::to_string(t.status) + ", '" + t.city + "');";
		return query;
	}

	static void cinData(std::string filePath, std::vector <TableS> &v) {
		std::cout << filePath << "\n";
		FILE *fp = fopen(filePath.c_str(), "r");
		char a[20], b[20], d[20]; int c;
		// 会有编码问题,需要进行转码
		while (fscanf(fp, "%s %s %d %s", a, b, &c, d) != EOF) {
			v.push_back(TableS(std::string(a), std::string(b), c, std::string(d)));
		}
		fclose(fp);
	}
};

C++在Mysql中的基本使用就是这些,欢迎纠错。

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值