C++连接MySQL主流方式是MySQL Connector/C++(推荐)或MySQL C API;前者面向对象、语法清晰,后者轻量但需手动管理资源;示例包含连接、查询、参数化防注入及事务控制。
用C++连接MySQL数据库,主流方式是使用官方提供的 MySQL Connector/C++(推荐)或较底层的 MySQL C API(libmysqlclient)。前者面向对象、语法清晰;后者更轻量但需手动管理资源。下面以 Connector/C++ 为主给出实用示例,附带关键配置和常见问题提示。
确保已安装 MySQL Server,并获取对应版本的 Connector/C++:
sudo apt install libmysqlcppconn-dev)-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;}
避免拼接字符串,改用 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;实际开发中容易踩坑的地方:
LD_LIBRARY_PATH 或 Windows 的 PATH)是否包含 connector 的 so/dll 文件bind-address 配置)、用户权限(GRANT ALL ON testdb.* TO 'user'@'%')及防火墙设置?useUnicode=true&characterEncoding=utf8,且确保表字段为 utf8mb4
基本上就这些。Connector/C++ 封装良好,适合大多数项目;若追求极致性能或嵌入式场景,可考虑 C API,但需自行处理内存、错误、字符集等细节。