目录
一、环境安装
二、环境配置
三、编写程序
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 &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中的基本使用就是这些,欢迎纠错。