C++ 使用 MySQL Connector/C++ 连接 MySQL
大纲
前言
本文将介绍 C++ 如何使用 MySQL Connector/C++ 的 API 去连接 MySQL 数据库,适用于 Windows 系统。
版本说明
本文使用的各软件版本如下所示:
| 软件 | 版本 | 默认安装路径 | 说明 |
|---|---|---|---|
| C++ | 11 | ||
| Boost | 1_77_0 | C:\Program Files\boost_1_77_0 | |
| OpenSSL | v1.1.1L | C:\Program Files\OpenSSL-Win64 | |
| MySQL Connector/C++ | 1.1.13 | C:\Program Files\MySQL\MySQL Connector C++ 1.1.13 | |
| MySQL Server | 5.7.33 | MySQL Connector/C++ 支持 MySQL 5.x 和 8.x 版本 | |
| Visual Studio | 2019 | ||
| Windows System | Windows 10 | MySQL Connector/C++ 同时适用于 Linux 和 Windows 系统 |
API 介绍
C++ 连接 MySQL 数据库,可以使用两种 API,包括 MySQL C API 和 MySQL Connector/C++。
MySQL C API 介绍
MySQL C API(Connector/C)是 MySQL 提供的一个低级别 C 语言编程接口,用于与 MySQL 服务器进行交互。它允许开发者通过 C 代码执行 SQL 语句、管理数据库连接、处理查询结果等,提供了直接、高效的数据库访问方式。
核心特性
- 轻量级:相比于 MySQL Connector/C++ 或 ODBC,C API 直接基于 MySQL 内核实现,性能更高。
- 与 MySQL 服务器直接通信:支持 TCP/IP、本地 Socket 连接等。
- 丰富的数据库操作函数:提供连接管理、查询执行、事务控制、错误处理等 API。
- 兼容多种平台:支持 Windows、Linux、macOS 等操作系统。
- 可嵌入式开发:适用于嵌入式系统或对性能要求较高的应用,如数据库代理、网关等。
适用场景
- 高性能 C 语言应用(如数据库代理、数据分析工具)
- 嵌入式开发(如物联网、游戏服务器)
- 系统级工具(如数据库管理工具、监控工具)
提示
如果项目需要 C++ 支持,可以考虑 MySQL Connector/C++,它封装了 MySQL C API,并提供了更高级的 OOP 方式访问 MySQL。
使用案例
MySQL Connector/C++ 介绍
MySQL Connector/C++ 是一个 MySQL 数据库连接器,包含了 C++ 连接 MySQL 服务器所需的头文件和库文件,可用于开发基于 JDBC 的 C++ 应用程序。
开发优势
与 MySQL C API(Connector/C)相比,MySQL Connector/C++ 为 C++ 用户提供以下好处:
- 纯 C++ 开发的便利
- 支持基于 JDBC 4.0 的 API
- 支持面向对象的编程范式
- 减少项目的开发时间
- 可根据要求获得商业许可证
- 根据 GPL 获得许可,但 FLOSS 许可除外
分发方式
MySQL Connector/C++ 有二进制文件和源代码分发版,并以特定于平台的打包格式提供:
- 二进制分发版可用于 Windows、Linux、Unix 和类 Unix 平台
- 源代码分发版可作为压缩的
tar文件或zip文件提供,并可在任何受支持的平台上使用 - 源代码存储库使用 Git 存储,可在 GitHub 上获得
与 JDBC 的兼容性
MySQL Connector/C++ 与 JDBC 4.0 API 兼容,没有实现完整的 JDBC 4.0 API,但具有以下类:Connection、DatabaseMetaData、Driver、PreparedStatement、ResultSet、ResultSetMetaData、Savepoint、Statement。JDBC 4.0 API 为刚才提到的类定义了大约 450 个方法,MySQL Connector/C++ 实现了其中的大约 80%。
支持的平台和先决条件
对于 MySQL Connector/C++ 1.1.11 及更高版本,商业和社区发行版需要依赖 Visual C++ Redistributable for Visual Studio 2015 才能在 Windows 平台上运行。从 MySQL Connector/C++ 1.1.10 开始,社区(非商业)发行版需要依赖适用于 Visual Studio 2013 的 Visual C++ Redistributable。可在 Microsoft 下载中心获取 Redistributable 的安装包,并在安装 MySQL Connector/C++ 之前安装它。
要运行带 MySQL Connector/C++ 的应用程序,需要 MySQL 5.6 或更高版本的数据库服务器
要构建带 MySQL Connector/C++ 的应用程序
- 在 Windows 系统上,需要 Microsoft Visual Studio 2015
要从源代码构建 MySQL Connector/C++ 自身
- 在 Windows 系统上,需要 Microsoft Visual Studio 2015
- Building Connector/C++ 需要 MySQL 5.7(5.7.9 或更高版本)或 MySQL 8.0(8.0.11 或更高版本)的客户端库
准备工作
本节将演示 Windows 平台如何安装 MySQL Connector/C++ 库,为后续 C++ 使用 MySQL Connector/C++ 库去连接 MySQL 做准备。
OpenSSL 安装
安装 OpenSSL
在 OpenSSL 官网 下载 Win64 OpenSSL v1.1.1L 版本的安装包,下载完成后直接安装,每一步安装步骤选择默认选项即可。OpenSSL 默认的安装路径是 C:\Program Files\OpenSSL-Win64。
VS 项目添加 OpenSSL 的 库文件
OpenSSL 安装完成之后,将其安装目录下的 bin 文件夹中的 libssl-1_1-x64.dll 和 libcrypto-1_1-x64.dll 库文件拷贝到 VS 项目的目录中,如下图所示:

VS 项目引入 OpenSSL 的 头文件
右键项目,选择 属性,导航到 配置属性 -> C/C++ -> 常规 -> 附加包含目录,添加 OpenSSL 头文件所在的目录路径(如 C:\Program Files\OpenSSL-Win64\include),如下图所示:

MySQL Connector/C++ 安装
安装 MySQL Connector/C++
在 MySQL 官网 上下载 1.1.13 版本的 MySQL Connector/C++,下载完成后直接安装即可。若已经本地已经安装过 MySQL Server,则不再需要手动安装 MySQL Connector/C++,因为默认已经安装过了,但需要留意 MySQL Connector/C++ 与 MySQL 的版本是否匹配 。值得一提的是,MySQL Connector/C++ 支持多个版本共存(同时安装不同的版本),其默认的安装路径为 C:\Program Files\MySQL\Connector.C++ 1.x。
VS 项目添加 MySQL Connector/C++ 的 库文件
MySQL Connector/C++ 安装完成后,将其安装目录下 lib/opt 文件夹中的 mysqlcppconn.dll 与 mysqlcppconn.lib 库文件拷贝到 VS 项目的目录中,如下图所示:

VS 项目引入 MySQL Connector/C++ 的头文件
右键项目,选择 属性,导航到 配置属性 -> C/C++ -> 常规 -> 附加包含目录,添加 MySQL Connector/C++ 头文件所在的目录路径(如 C:\Program Files\MySQL\MySQL Connector C++ 1.1.13\include),如下图所示:

C++ 使用 MySQL Connector/C++
本节将演示 C++ 如何使用 MySQL Connector/C++ 库去连接 MySQL 数据库。
MySQL 数据库初始化
1 | -- ---------------------------- |
C++ 连接 MySQL 的核心代码
mysqldb.h源文件
1 |
|
mysqldb.cpp源文件
1 |
|
C++ 连接 MySQL 的测试代码
main.cpp源文件
1 |
|
- 程序运行输出的结果如下:
1 | Query: select * from properties where `KEY` = ? |
常见问题
代码调试技巧
提示
在开发需要使用 MySQL 数据库的项目时,会经常出现问题,也就是 MySQL API 调用出错,提示 Insert、Delete、Update 等操作执行失败,或者连接 MySQL Server 失败等,很多人不知道遇到这个问题该怎么办?
- 当使用的是 MySQL Connector/C++(JDBC-Style API)库,可以通过异常来获取错误信息:
1 | try { |
- 通过
e.getErrorCode()获取错误码,e.getSQLState()获取 SQL 状态码,而e.what()获取详细的错误信息。如果使用的是 MySQL X DevAPI,错误提示信息同样可以通过异常处理来获取得到。
缺失 Boost 库
错误信息:
- 项目执行编译操作后,VS 出现下述错误信息,这是本地缺失
boost库导致的。
1 | fatal error C1083: 无法打开包括文件: “boost/shared_ptr.hpp”: No such file or directory |
解决方法:
- (a) 在 Boost 官网 下载最新版本的
Boost,并解压到本地磁盘,例如解压路径为:C:\Program Files\boost_1_77_0 - (b) 右键项目,选择
属性,导航到配置属性->C/C++->常规->附加包含目录,添加Boost的安装路径(如C:\Program Files\boost_1_77_0),如下图所示 - (c) 重新执行项目的编译操作

缺失 libssl-1_1-64.dll 文件
错误信息:
- 项目运行后,系统弹窗提示以下错误信息。
1 | 由于找不到 libssl-1_1-64.dll,无法继续执行代码。重新安装程序可能会解决此问题。 |
解决方法:
- 安装 OpenSSL,并拷贝
libssl-1_1-64.dll库文件到 VS 项目的目录中,具体步骤可参考上面的 OpenSSL - 安装 教程。
缺失 libcrypto-1_1-x64.dll 文件
错误信息:
- 项目运行后,系统弹窗提示以下错误信息。
1 | 由于找不到 libcrypto-1_1-x64.dll,无法继续执行代码。重新安装程序可能会解决此问题。 |
解决方法:
- 安装 OpenSSL,并拷贝
libcrypto-1_1-x64.dll库文件到 VS 项目的目录中,具体步骤可参考上面的 OpenSSL - 安装 教程。
