C++ 使用最新 MySQL Connector/C++(X DevAPI)+ CMake 完整教程
一、安装环境
1. 安装 Homebrew(如未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
2. 安装 MySQL
brew install mysql
brew services start mysql
- 默认 root 用户无密码。可用
mysql -uroot
登录:
mysql -uroot
- X Protocol 默认端口 33060。
3. 安装最新 MySQL Connector/C++
brew install mysql-connector-c++
- Intel Mac 路径:
/usr/local/opt/mysql-connector-c++
- M1/M2 Mac 路径:
/opt/homebrew/opt/mysql-connector-c++
- 包含 X DevAPI,头文件在
include/mysqlx
,库文件为libmysqlcppconnx.dylib
。
二、创建项目目录
mkdir mysql_demo
cd mysql_demo
目录结构:
mysql_demo/
├── CMakeLists.txt
└── main.cpp
三、main.cpp 示例(X DevAPI + MySQL 操作)
#include <iostream>
#include <mysqlx/xdevapi.h>int main() {try {// 1. 连接 MySQL X Protocol(默认端口 33060)mysqlx::Session sess("localhost", 33060, "root", "");// 2. 创建数据库(如果不存在)sess.sql("CREATE DATABASE IF NOT EXISTS test_db").execute();sess.sql("USE test_db").execute();// 3. 创建表sess.sql("CREATE TABLE IF NOT EXISTS users (""id INT PRIMARY KEY AUTO_INCREMENT, ""name VARCHAR(50), ""age INT)").execute();// 4. 插入数据sess.sql("INSERT INTO users(name, age) VALUES ('Alice', 25)").execute();sess.sql("INSERT INTO users(name, age) VALUES ('Bob', 30)").execute();sess.sql("INSERT INTO users(name, age) VALUES ('Charlie', 22)").execute();// 5. 查询数据std::cout << "查询 users 表数据:" << std::endl;mysqlx::RowResult res = sess.sql("SELECT * FROM users").execute();for (mysqlx::Row row : res) {std::cout << "ID: " << row[0].get<int>()<< ", Name: " << row[1].get<std::string>()<< ", Age: " << row[2].get<int>() << "\n";}// 6. 更新数据sess.sql("UPDATE users SET age=28 WHERE name='Alice'").execute();std::cout << "更新 Alice 的年龄完成." << std::endl;// 7. 删除数据sess.sql("DELETE FROM users WHERE name='Bob'").execute();std::cout << "删除 Bob 完成." << std::endl;// 8. 查询剩余数据std::cout << "查询更新后的 users 表数据:" << std::endl;res = sess.sql("SELECT * FROM users").execute();for (mysqlx::Row row : res) {std::cout << "ID: " << row[0].get<int>()<< ", Name: " << row[1].get<std::string>()<< ", Age: " << row[2].get<int>() << "\n";}std::cout << "所有操作完成!" << std::endl;} catch (const mysqlx::Error &err) {std::cerr << "X DevAPI 错误: " << err.what() << std::endl;} catch (const std::exception &ex) {std::cerr << "标准错误: " << ex.what() << std::endl;} catch (...) {std::cerr << "未知错误" << std::endl;}return 0;
}
四、智能 Homebrew CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(mysql_demo)set(CMAKE_CXX_STANDARD 17)# 自动检测 Homebrew 安装路径
if(EXISTS "/opt/homebrew/opt/mysql-connector-c++")set(MYSQLCPP_HOME "/opt/homebrew/opt/mysql-connector-c++")
elseif(EXISTS "/usr/local/opt/mysql-connector-c++")set(MYSQLCPP_HOME "/usr/local/opt/mysql-connector-c++")
else()message(FATAL_ERROR "找不到 mysql-connector-c++,请先通过 Homebrew 安装。")
endif()message(STATUS "使用 mysql-connector-c++ 路径: ${MYSQLCPP_HOME}")# 包含头文件和库
include_directories(${MYSQLCPP_HOME}/include)
link_directories(${MYSQLCPP_HOME}/lib)# 可执行文件
add_executable(mysql_demo main.cpp)# 链接 X DevAPI 库
target_link_libraries(mysql_demo PRIVATE mysqlcppconnx)
五、编译与运行
# 生成构建文件
cmake -B build -S .# 编译
cmake --build build# 运行
./build/mysql_demo
示例输出:
查询 users 表数据:
ID: 1, Name: Alice, Age: 25
ID: 2, Name: Bob, Age: 30
ID: 3, Name: Charlie, Age: 22
更新 Alice 的年龄完成.
删除 Bob 完成.
查询更新后的 users 表数据:
ID: 1, Name: Alice, Age: 28
ID: 3, Name: Charlie, Age: 22
所有操作完成!
六、关键点总结
-
X DevAPI 接口
- 头文件在
mysqlx
目录 - 库为
mysqlcppconnx
- 默认连接端口 33060
- 头文件在
-
CMake 自动路径检测
- 支持 Intel
/usr/local/opt/...
- 支持 M1/M2
/opt/homebrew/opt/...
- 支持 Intel
-
MySQL 操作流程
- 创建数据库:
CREATE DATABASE IF NOT EXISTS
- 选择数据库:
USE
- 创建表:
CREATE TABLE IF NOT EXISTS
- 插入数据:
INSERT INTO ... VALUES ...
- 查询数据:
SELECT * FROM ...
- 更新数据:
UPDATE ... SET ... WHERE ...
- 删除数据:
DELETE FROM ... WHERE ...
- 创建数据库:
-
错误处理
- 捕获
mysqlx::Error
、std::exception
和未知异常,保证程序不会异常退出
- 捕获