【最新2024】Windows系统,C++ 操作 MySQL 数据库

踩坑一天,终于把环境搞好了

背景条件

使用 vscode

在Windows系统

操作MySQL数据库
不是用 Visual Studio, 网上一车用这玩意的,vscode不香吗,就是没一个写教程的

首先MySQL的版本要是 8.0 或者 8.4,官方推荐的版本,我都试了,这两个没问题

然后就是包管理器,哈哈没有,Python用pip包管理,C++在Windows上也用包管理

因为我们需要安装一些依赖包,比如 curl (等同Python中的requests),openssl, mysql-connector-cpp 等,这些都是网络编程不可少的

我们安装的是 vcpkg 包管理器

为了能正常使用 vcpkg,我们要安装 Visual Studio,没错,这个是必须要安装的

安装包过程还需要 cmake

软件安装

cmake

官方下载正常安装就行,没啥注意的

Visual Studio

官网下载去,安装选择 C++集成的功能就行,切记默认勾选安装的工具,千万不要为了省空间去掉几个工具,默认选的哪些不要管,点下一步安装就行

vcpkg

从 GitHub 克隆 vcpkg 存储库
git clone https://github.com/microsoft/vcpkg

点击 bootstrap-vcpkg.bat

建议直接安装在C盘的根目录

安装包的时候,切到vcpkg的目录下安装就行

安装命令
vcpkg install curl:x64-windows openssl:x64-windows mysql-connector-cpp:x64-windows

安装过程会很久,mysql-connector-cpp:x64-windows 这个太耗时了,估摸将近半小时

安装完之后
vcpkg integrate install 别忘了

MySQL

推荐 phpstudy, 简单方便

在mysql目录下,my.ini 中,加一个配置

cpp 复制代码
[mysqld]
mysqlx=1

这样代码里才能用

测试代码

在phpstudy中,安装phpadmin 在网页上管理数据库或者navicat都行

新建数据库,建一个测试用的表,表结构自己看代码把

cpp 复制代码
// main.cpp
#include <mysqlx/xdevapi.h>
#include <iostream>

using namespace mysqlx;

int main() {
    try {
        // 创建一个 MySQL 会话
        Session mySession("mysqlx://root:123456@localhost:33060");

        // 连接到指定的数据库
        Schema myDb = mySession.getSchema("stock");

        // 获取或创建一个表
        Table myTable = myDb.getTable("test", true);

        // 插入数据
        myTable.insert("id", "name", "age")
               .values(1, "John Doe", 30)
               .values(4, "Jane Doe", 25)
               .execute();

        std::cout << "Inserted data into the table." << std::endl;

        // 查询数据
        RowResult myResult = myTable.select("id", "name", "age").execute();

        std::cout << "Selected data from the table:" << std::endl;
        for (Row row : myResult) {
            std::cout << "ID: " << row[0] << ", Name: " << row[1] << ", Age: " << row[2] << std::endl;
        }

        // 删除数据
        myTable.remove().where("age > 28").execute();

        std::cout << "Deleted records with age > 28." << std::endl;

        // 再次查询以验证删除
        myResult = myTable.select("id", "name", "age").execute();

        std::cout << "Remaining data after deletion:" << std::endl;
        for (Row row : myResult) {
            std::cout << "ID: " << row[0] << ", Name: " << row[1] << ", Age: " << row[2] << std::endl;
        }

        // 关闭会话
        mySession.close();
    } catch (const mysqlx::Error &err) {
        std::cerr << "ERROR: " << err.what() << std::endl;
        return 1;
    } catch (std::exception &ex) {
        std::cerr << "STD EXCEPTION: " << ex.what() << std::endl;
        return 1;
    } catch (...) {
        std::cerr << "UNKNOWN EXCEPTION" << std::endl;
        return 1;
    }
    system("pause");

    return 0;
}

这个测试代码也很坑,GPT告诉你的是错误的

cpp 复制代码
Session mySession(SessionOption::HOST, "localhost",
                          SessionOption::PORT, 3306,
                          SessionOption::USER, "root",
                          SessionOption::PWD, "123456");

这玩意是错的...

编译

超级坑!!!

在windows平台,能编译c++的,有TDM GCC,我一直用的

也有 WinGW ,还有微软的 MSVC

让人无语的是 vcpkg 安装的包,默认的包,都是适配MSVC的,其他会有问题

比如

curl:x64-windows

curl:x64-windows-static

curl:x64-mingw-dynamic

curl:x64-mingw-static

这4种,现不说arm这种不常用的架构了

curl:x64-windows这个最简洁默认的,不好意思,给MSVC准备的,最后两个才是给mingw准备的

你要是安装了第一个,但用mingw编译,报错把你搞崩溃

你要是安装了最后两个,用mingw编译,不好意思,报错还能把你搞崩溃

所以,唯一解就是MSVC 编译了

在开始菜单

搜索 x64 Native Tools Command Prompt 打开后就是命令行输入的地方

编译命令

sh 复制代码
cl /std:c++17 /EHsc C:\main.cpp  /I "C:\vcpkg\installed\x64-windows\include"  /link /LIBPATH:"C:\vcpkg\installed\x64-windows\lib"  mysqlcppconn8.lib libcurl.lib libssl.lib libcrypto.lib zlib.lib zstd.lib lz4.lib ws2_32.lib crypt32.lib

不用问为啥链接这么多,干就完事了

.\main.exe 命令行里运行!

顺利的话,环境就搞好了~

相关推荐
五阿哥永琪31 分钟前
MySQL 慢查询定位与 SQL 性能优化实战指南
sql·mysql·性能优化
农夫山泉2号34 分钟前
【c++】——c++编译的so中函数有额外的字符
java·服务器·c++
DolphinDB智臾科技36 分钟前
DolphinDB 面向金融交易与定价的统一数据模型
数据库·时序数据库
檀越剑指大厂42 分钟前
时序数据库性能之战:金仓数据库如何在复杂场景下反超 InfluxDB?
数据库·时序数据库
计算机毕设VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue图书借阅管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
数据与人1 小时前
mongodb报错Sort exceeded memory limit of 104857600 bytes
数据库·mongodb
仰泳的熊猫1 小时前
1077 Kuchiguse
数据结构·c++·算法·pat考试
程序员鱼皮1 小时前
消息队列从入门到跑路,保姆级教程!傻子可懂
数据库·程序员·消息队列
C++业余爱好者2 小时前
SQL语言家族入门指南:标准SQL、T-SQL与PL/SQL详解
数据库·sql
白驹过隙^^2 小时前
OB-USP-AGENT安装使用方法
数据库·经验分享·网络协议·tcp/ip·github·ssl