当前位置: 首页 > article >正文

Windows系统安装MySQL Connector 使用C++ VS2022连接MySQL

1. 官网及版本

1.1. 网址

官方文档 - 安装编译构建: https://dev.mysql.com/doc/connector-cpp/9.3/en/
官方文档 - 使用案例: https://dev.mysql.com/doc/dev/connector-cpp/latest/
下载地址: https://dev.mysql.com/downloads/connector/cpp/

1.2. 版本变化(个人总结)

目前有3个大版本,1.x、8.x、9.x,1.x基本不再使用,一般至少会选择 8.x+。
Connector C++的早期版本依赖Boost库,从1.x开始,到8.x减少使用,再到9.x完全移除。
其中,8.x版本比较乱,从1.x~8.0.22,需要安装Boost库;从8.0.23开始,不需要安装Boost库。
其中,从8.1.0开始,不再提供32位版本,需要的话,自行编译。
其中,从9.x版本开始,附加依赖项区别于8.x的(mysqlcppconn.dll和mysqlcppconn8.dll),而是改为(mysqlcppconn.dll和mysqlcppconnx.dll)。

2. 下载

2.1. 打开下载地址,选择版本

Connector C++安装包种类说明:
根据需要下载对应的版本,推荐把四种全部下载,后面还要配置通用多平台。

2.2. 避坑说明

有坑:Connector C++的Debug、Release需要与Visual Studio的Debug、Release 一一对应,官网没有特别说明,初学者容易入坑。

3. 安装

3.1. 单平台模式安装(winx64+Release)

3.1.1. 解压

先把mysql-connector-c++-8.0.30-winx64.zip解压到D:\software\MySQL\mysql-connector-c++-8.0.30.winx64,再重命名为mysql-connector-c++-8.0.30.single。

3.1.2. 配置VS2022

  1. 先将原本的Debug改为Release

  2. 点击项目,右键属性,进入属性页
  3. C/C++ → 附加包含目录

  4. 将 D:\software\MySQL\mysql-connector-c++-8.0.30.single\include 加到附加包含目录

  5. 链接器→附加库目录

  6. 将 D:\software\MySQL\mysql-connector-c++-8.0.30.single\lib64\vs14 加到附加库目录

  7. 链接器→输入→附加依赖项

  8. 将 mysqlcppconn.lib;mysqlcppconn

  9. 应用、确定
  10. 完成!

3.2. 多平台模式安装

3.2.1. 准备工作

  1. 先把之前下载的4个包都解压;
  2. 新建一个文件夹mysql-connector-c++-8.0.30.all,用于存放4个合并包的位置;
  3. 2个Release包按照debug包,调整目录结构;
  4. 2个debug包中文件夹名由debug改为Debug;
  5. 4个包合并到mysql-connector-c++-8.0.30.all。

3.2.2. 创建VS项目属性表文件

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><ImportGroup Label="PropertySheets" /><PropertyGroup><MYSQL_CPPCONN_DIR>D:\software\MySQL\mysql-connector-c++-8.0.30.all</MYSQL_CPPCONN_DIR><!--设置统一输出目录--><OutDir>$(SolutionDir)\$(Platform)\$(Configuration)\</OutDir></PropertyGroup><ItemDefinitionGroup><ClCompile><!--相对于附加包含目录--><AdditionalIncludeDirectories>$(MYSQL_CPPCONN_DIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories><!--增加额外编译选项,防止出现乱码--><AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions></ClCompile><Link><!-- Win32条件下附加库目录 --><AdditionalLibraryDirectories Condition="'$(Platform)'=='Win32'">$(MYSQL_CPPCONN_DIR)\lib\vs14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories><!-- x64条件下附加库目录 --><AdditionalLibraryDirectories Condition="'$(Platform)'=='x64'">$(MYSQL_CPPCONN_DIR)\lib64\vs14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories><!--附加依赖项--><AdditionalDependencies>mysqlcppconn.lib;mysqlcppconn8.lib;%(AdditionalDependencies)</AdditionalDependencies></Link><!--生成后事件,用于将依赖dll复制到目标目录--><PostBuildEvent><Command>
if "$(Platform)" == "Win32" (xcopy /y /i "$(MYSQL_CPPCONN_DIR)\lib\*.dll" "$(TargetDir)"xcopy /y /i "$(MYSQL_CPPCONN_DIR)\lib\$(Configuration)\*.dll" "$(TargetDir)"
) else (xcopy /y /i "$(MYSQL_CPPCONN_DIR)\lib64\*.dll" "$(TargetDir)"xcopy /y /i "$(MYSQL_CPPCONN_DIR)\lib64\$(Configuration)\*.dll" "$(TargetDir)"
)</Command></PostBuildEvent></ItemDefinitionGroup>
</Project>

3.2.3. 运行效果

4. 测试代码

#include <mysql/jdbc.h>
#include <string>
#include <iostream>
#include <windows.h>using namespace std;
using namespace sql;
using namespace mysql;int main() {SetConsoleCP(65001);SetConsoleOutputCP(65001);try {cout << "1. 正在加载驱动..." << endl;MySQL_Driver* driver = get_mysql_driver_instance();cout << "2. 驱动版本:" << driver->getMajorVersion()<< "." << driver->getMinorVersion()<< "." << driver->getPatchVersion() << endl;cout << "3. 尝试连接数据库..." << endl;unique_ptr<Connection> conn{driver->connect("tcp://127.0.0.1:3306","root","root")};cout << "4. 切换数据库..." << endl;conn->setSchema("test");cout << "5. 执行实际查询..." << endl;unique_ptr<Statement> stmt{ conn->createStatement() };unique_ptr<ResultSet> rs{ stmt->executeQuery("SELECT * FROM users;") };while (rs->next()) {int id = rs->getInt("id");string name = rs->getString("username");string pwd = rs->getString("password");cout << "ID: " << id<< ", Username: " << name<< ", Password: " << pwd << endl;}}catch (SQLException& e) {cerr << "\n!!! SQL异常 !!!\n"<< "错误信息: " << e.what() << "\n"<< "错误代码: " << e.getErrorCode() << endl;return EXIT_FAILURE;}catch (std::exception& e) {cerr << "标准异常: " << e.what() << endl;return EXIT_FAILURE;}catch (...) {cerr << "未知异常!" << endl;return EXIT_FAILURE;}getchar();return EXIT_SUCCESS;
}

5. 错误总结

5.1. Unable to connect to localhost 1367760

代码
cerr << "\n!!! SQL异常 !!!\n"<< "错误信息: " << e.what() << "\n"<< "错误代码: " << e.getErrorCode() << endl;
return EXIT_FAILURE;
原因:在VS2022 Debug模式下,引用Release MySQL connector包,导致连接失败。

5.2. 0x00007FFD96D42070 (ucrtbased.dll)处(位于 xxx.exe 中)引发的异常: 0xC0000005: 读取位置 0x00007F0045444F4D 时发生访问冲突。

代码
cerr << "\n!!! SQL异常 !!!\n"<< "错误信息: " << e.what() << "\n"<< "错误代码: " << e.getErrorCode() << "\n"<< "SQL状态: " << e.getSQLState() << endl;
return EXIT_FAILURE;
原因:也是在VS2022 Debug模式下,引用Release MySQL connector包,同时,还增加了getSQLState()的调用导致的。

5.3. 无法打开包括文件: “boost/shared_ptr.hpp”: No such file or directory

原因:使用的是低版本的MySQL connector包(<8.0.23),需要额外配置Boost库

6. 另外乱码问题

6.1. 编译选项

<!--增加额外编译选项,防止出现乱码-->
<AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>

6.2. 代码中设置控制台编码

    // 设置控制台编码格式为UTF-8SetConsoleCP(65001);SetConsoleOutputCP(65001);

6.3. VS2022中文件编码

http://www.lryc.cn/news/2392157.html

相关文章:

  • D2000平台上Centos使用mmap函数遇到的陷阱
  • Elasticsearch索引机制与Lucene段合并策略深度解析
  • BPE、WordPiece 与 Unigram:三种主流子词分词算法对比
  • 青少年编程与数学 02-020 C#程序设计基础 11课题、可视化编程
  • AI时代新词-AI驱动的自动化(AI - Driven Automation)
  • 整合Jdk17+Spring Boot3.2+Elasticsearch9.0+mybatis3.5.12的简单用法
  • Starrocks 物化视图的实现以及在刷新期间能否读数据
  • 前后端传输 Long 类型数据时(时间戳,雪花算法ID),精度丢失的根本原因
  • 探索容器技术:Docker与Kubernetes的实践指南
  • Ubuntu从0到1搭建监控平台:本地部署到公网访问实战教程Cpolar穿透与Docker部署全过程
  • vscode java debug terminal 中文乱码
  • 3D PDF如何制作?SOLIDWORKS MBD模板定制技巧
  • Qt DateTimeEdit(时间⽇期的微调框)
  • C# 类和继承(屏蔽基类的成员)
  • 基于qt5和stk10开发的互联调试
  • matlab雷达定位仿真
  • 基于vue框架的动物园饲养管理系统a7s60(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • MySQL 索引和事务
  • BERT分类器和朴素贝叶斯分类器比较
  • WPS自动换行
  • C#面向对象核心:类继承详解
  • maven中的grpc编译插件protobuf-maven-plugin详解
  • 服务发现Nacos
  • 社群分享:义乌|杭州电商|店群卖家,私域鱼塘运营的排单系统开源|私域鱼塘运营|返款软件开源
  • C#回调函数深度解析
  • 通义智文开源QwenLong-L1: 迈向长上下文大推理模型的强化学习
  • HTTP代理的实际用处有哪些?HTTP代理强在哪里?
  • 低代码——表单生成器以form-generator为例
  • 【Vue Vapor Mode :技术突破与性能优化的可能性】
  • Parasoft C++Test软件单元测试_常见问题及处理