目录
一、环境安装
1.Mysql 8.0
2.Microsoft Visual Studio 2017
注意:vs2019版本及以下才支持Mysql,若使用高版本可以使用SQL Server
二、环境配置
检查Mysql 8.0的安装文件夹中是否包含include和lib文件夹,若不存在,需要重新安装
打开项目属性页面
将[调试]中的[环境]改为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”。
将运行平台改为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); // initmysql_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");// ......}
注意:
代码完成了Mysql类的实现,各个函数自行百度。
在 useDatabase() 调用后,就可以根据自己的需要创建表,插入数据等等操作,核心思想就是用 mysql_query(string) 发起请求。
writeInfo() 实现了结果集的输出。
如果插入的数据量很大,可以自定义结构体莱实现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中的基本使用就是这些,欢迎纠错。
来源地址:https://blog.csdn.net/joyride_run/article/details/130403835