C++连接MySQL主流方式是MySQL Connector/C++(推荐)或MySQL C API;前者面向对象、语法清晰,后者轻量但需手动管理资源;示例包含连接、查询、参数化防注入及事务控制。

用C++连接MySQL数据库,主流方式是使用官方提供的 MySQL Connector/C++(推荐)或较底层的 MySQL C API(libmysqlclient)。前者面向对象、语法清晰;后者更轻量但需手动管理资源。下面以 Connector/C++ 为主给出实用示例,附带关键配置和常见问题提示。
安装与环境准备
确保已安装 MySQL Server,并获取对应版本的 Connector/C++:
- Linux:通过包管理器安装(如 Ubuntu:
sudo apt install libmysqlcppconn-dev) - Windows:从 MySQL 官网下载 ZIP 包,解压后配置 include 和 lib 路径
- 编译时链接库:
-lmysqlcppconn(Linux/macOS)或链接mysqlcppconn.lib(Windows)
基础连接与查询示例
以下代码演示如何连接数据库、执行 SELECT 查询并遍历结果:
#include#include #include #include #include int main() { sql::mysql::MySQL_Driver driver; sql::Connection con; sql::Statement stmt; sql::ResultSet res;
try { driver = sql::mysql::get_mysql_driver_instance(); // 连接格式:host:port, username, password, database(database 可选) con = driver->connect("tcp://127.0.0.1:3306", "root", "password"); con->setSchema("testdb"); // 切换到目标数据库 stmt = con->createStatement(); res = stmt->executeQuery("SELECT id, name FROM users LIMIT 5"); while (res->next()) { std::cout << "ID: " << res->getInt("id") << ", Name: " << res->getString("name") << std::endl; } } catch (sql::SQLException &e) { std::cerr << "SQL Error: " << e.what() << std::endl; return 1; } delete res; delete stmt; delete con; return 0;}
立即学习“C++免费学习笔记(深入)”;
Difeye是一款超轻量级PHP框架,主要特点有: Difeye是一款超轻量级PHP框架,主要特点有: ◆数据库连接做自动主从读写分离配置,适合单机和分布式站点部署; ◆支持Smarty模板机制,可灵活配置第三方缓存组件; ◆完全分离页面和动作,仿C#页面加载自动执行Page_Load入口函数; ◆支持mysql,mongodb等第三方数据库模块,支持读写分离,分布式部署; ◆增加后台管理开发示例
参数化查询(防 SQL 注入)
避免拼接字符串,改用 PreparedStatement:
- 用
?占位,调用setInt()、setString()等方法赋值 - 支持事务控制:
con->setAutoCommit(false)+con->commit()/rollback()
sql::PreparedStatement *pstmt = con->prepareStatement(
"INSERT INTO users(name, age) VALUES (?, ?)");
pstmt->setString(1, "Alice");
pstmt->setInt(2, 28);
pstmt->executeUpdate(); // 执行 INSERT/UPDATE/DELETE
delete pstmt;常见问题提醒
实际开发中容易踩坑的地方:
- 运行时报 “undefined symbol” 或 “DLL load failed”:检查动态库路径(
LD_LIBRARY_PATH或 Windows 的 PATH)是否包含 connector 的 so/dll 文件 - 连接被拒绝:确认 MySQL 允许远程连接(
bind-address配置)、用户权限(GRANT ALL ON testdb.* TO 'user'@'%')及防火墙设置 -
中文乱码:连接 URL 加参数
?useUnicode=true&characterEncoding=utf8,且确保表字段为utf8mb4
基本上就这些。Connector/C++ 封装良好,适合大多数项目;若追求极致性能或嵌入式场景,可考虑 C API,但需自行处理内存、错误、字符集等细节。









