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

news2025/6/1 3:55:24

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-8
    SetConsoleCP(65001);
    SetConsoleOutputCP(65001);

6.3. VS2022中文件编码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2392157.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

D2000平台上Centos使用mmap函数遇到的陷阱

----------原创不易&#xff0c;欢迎点赞收藏。广交嵌入式开发的朋友&#xff0c;讨论技术和产品------------- 在飞腾D2000平台上&#xff0c;安装了麒麟linux系统&#xff0c;我写了个GPIO点灯的程序&#xff0c;在应用层利用mmap函数将内核空间映射到用户态&#xff0c;然后…

Elasticsearch索引机制与Lucene段合并策略深度解析

引言 在现代分布式搜索引擎Elasticsearch中&#xff0c;文档的索引、更新和删除操作不仅是用户交互的核心入口&#xff0c;更是底层存储架构设计的关键挑战。本文围绕以下核心链路展开&#xff1a; 文档生命周期管理&#xff1a;从客户端请求路由到分片定位&#xff0c;从内存…

整合Jdk17+Spring Boot3.2+Elasticsearch9.0+mybatis3.5.12的简单用法

Elasticsearch是一个基于Lucene的分布式搜索和分析引擎&#xff0c;广泛应用于全文搜索、日志分析等场景。结合Spring Boot可以快速构建强大的搜索应用。本文将介绍如何在Spring Boot项目中集成和使用Elasticsearch。 ES9.0.1目前支持的包只有 elasticsearch-rest-client/ …

Ubuntu从0到1搭建监控平台:本地部署到公网访问实战教程Cpolar穿透与Docker部署全过程

文章目录 前言1.关于Ward2.Docker部署3.简单使用ward4.安装cpolar内网穿透5. 配置ward公网地址6. 配置固定公网地址总结 前言 IT运维人员是否常为服务器管理系统的复杂操作所困扰&#xff1f;当海量性能指标图表与密集预警信号同时涌现时&#xff0c;这种信息过载往往让专业团…

vscode java debug terminal 中文乱码

现象 解决 快捷键 ctrl , 进入setting 配文件添加 "terminal.integrated.automationProfile.windows": {"path": "cmd","args": ["/k","chcp","65001"]}terminal 启动时&#xff0c;活动也改为 utf-…

3D PDF如何制作?SOLIDWORKS MBD模板定制技巧

SOLIDWORKS制作3D PDF模版 SOLIDWORKS MBD能够帮助工程师以清晰直观的方式描述产品尺寸信息。在3D PDF文件中&#xff0c;用户可以自由旋转和移动视图&#xff0c;方便查看模型的各个尺寸细节。 本文将带您一步步学习如何使用SOLIDWORKS MBD制作专业的3D PDF模板&#xff0c;…

Qt DateTimeEdit(时间⽇期的微调框)

使⽤ QDateEdit 作为⽇期的微调框. 使⽤ QTimeEdit 作为时间的微调框 使⽤ QDateTimeEdit 作为时间⽇期的微调框. 这⼏个控件⽤法⾮常相似, 我们以 QDateTimeEdit 为例进⾏介绍. QDateTimeEdit 核⼼属性 属性说明dateTime时间⽇期的值. 形如 2000/1/1 0:00:00date单纯⽇期…

C# 类和继承(屏蔽基类的成员)

屏蔽基类的成员 虽然派生类不能删除它继承的任何成员&#xff0c;但可以用与基类成员名称相同的成员来屏蔽&#xff08;mask&#xff09; 基类成员。这是继承的主要功能之一&#xff0c;非常实用。 例如&#xff0c;我们要继承包含某个特殊方法的基类。该方法虽然适合声明它的…

基于vue框架的动物园饲养管理系统a7s60(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;饲养员,健康登记,工作进度,动物信息,进食信息,动物健康,动物医治,饲料信息,工作留言 开题报告内容 基于Vue框架的动物园饲养管理系统开题报告 一、研究背景与意义 &#xff08;一&#xff09;研究背景 随着城市化进程加快和公众对生…

WPS自动换行

换行前 换行后 快捷键 第一步&#xff1a;启用「自动换行」功能 选中目标单元格/区域&#xff1a;点击需要设置的单元格&#xff08;或拖动选中多个单元格&#xff09;。开启自动换行&#xff08;3种方式任选&#xff09;&#xff1a; 快捷按钮&#xff1a;在顶部菜单栏点击「…

maven中的grpc编译插件protobuf-maven-plugin详解

protobuf-maven-plugin 是 Maven 中用于编译 Protocol Buffers&#xff08;protobuf&#xff09;文件并生成对应语言代码&#xff08;如 Java、C、Python 等&#xff09;的插件。在 gRPC 项目中&#xff0c;它常被用来生成服务端和客户端所需的代码。以下是该插件的详细解析&am…

服务发现Nacos

目录 Nacos server 安装 注册服务到Nacos server 接口访问Nacos server中的已注册服务 Nacos控制台介绍 Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 在分布式服务应用中&#xff0c;各类服务需要统一的注册、统一的管理&#xff0c;这个组件工具…

社群分享:义乌|杭州电商|店群卖家,私域鱼塘运营的排单系统开源|私域鱼塘运营|返款软件开源

熟悉东哥的朋友都知道&#xff0c;我自己也运营一个电商社群&#xff0c;主要是针对玩私域|鱼塘的电商玩家。 在当前电商环境下&#xff0c;社群分享型电商、店群卖家及私域鱼塘运营者&#xff0c;面临着日益复杂的订单管理和客服调度问题。传统的人工处理不仅效率低…

C#回调函数深度解析

文章目录 前言什么是回调函数C#中实现回调的方式委托(Delegate)事件(Event)Action和FuncPredicateAsyncCallback匿名方法和Lambda表达式 回调函数实际应用场景异步编程事件处理策略模式LINQ查询 回调函数的优缺点优点缺点 最佳实践与注意事项总结相关资源 前言 在现代软件开发…

通义智文开源QwenLong-L1: 迈向长上下文大推理模型的强化学习

&#x1f389; 动态 2025年5月26日: &#x1f525; 我们正式发布&#x1f917;QwenLong-L1-32B——首个采用强化学习训练、专攻长文本推理的LRM模型。在七项长文本文档问答基准测试中&#xff0c;QwenLong-L1-32B性能超越OpenAI-o3-mini和Qwen3-235B-A22B等旗舰LRM&#xff0c…

低代码——表单生成器以form-generator为例

主要执行流程说明&#xff1a; 初始化阶段 &#xff1a; 接收表单配置对象formConf深拷贝配置&#xff0c;初始化表单数据和验证规则处理每个表单组件的默认值和特殊配置&#xff08;如文件上传&#xff09; 渲染阶段 &#xff1a; 通过render函数创建el-form根组件递归渲染表…

linux centos 服务器性能排查 vmstat、top等常用指令

背景:项目上经常出现系统运行缓慢,由于数据库服务器是linux服务器,记录下linux服务器性能排查常用指令 vmstat vmstat介绍 vmstat 命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。由 vmstat 命令生成的报告可以用于平衡系统负载活动。系统范围内的这…

LiveGBS国标视频平台收流模式:UDP、TCP被动与TCP主动传输模式之差异剖析

LiveGBS国标视频平台收流模式&#xff1a;UDP、TCP被动与TCP主动传输模式之差异剖析 1、背景2、信令传输3、视频流传输3.1、UDP传输模式3.2、TCP被动传输模式3.3、TCP主动传输模式 4、WEB配置流传输模式4.1、编辑模式4.2、下拉切换模式 5、搭建GB28181视频直播平台 1、背景 在…

Tomcat 使用与配置全解

一、 Tomcat简介 Tomcat服务器是Apache的一个开源免费的Web容器。它实现了JavaEE平台下部分技术规范&#xff0c;属于轻量级应用服务器。 1. Tomcat版本 Tomcat版本 JDK版本 Servlet版本 JSP版本 10.0.X 8 and later 5.0 3.0 9.0.x 8 and later 4.0 2.3 8.0.x 7…

aws instance store 的恢复

1: aws instance store 要在launch instance 才可以创建,而且,通过snapshot 恢复后,instance store 里面的数据会丢失。 下面是创建instance store 的过程,和通过两种方式恢复,发现/etc/fstab 不同的写法,有的不能启动: [root@ip-xx ~]# lsblk NAME MAJ:MIN RM …