下面是一个简单的C++代码示例,展示如何使用连接池来连接和操作MySQL数据库。在编译和运行之前,请确保已经安装了MySQL C++ Connector。
#include <mysql_driver.h>
#include <mysql_connection.h>
#include <cppconn/driver_manager.h>
#include <cppconn/exception.h>
#include <cppconn/prepared_statement.h>
#include <mutex>
#include <queue>
class ConnectionPool {
public:
static ConnectionPool& getInstance() {
static ConnectionPool instance;
return instance;
}
std::shared_ptr<sql::Connection> getConnection() {
std::unique_lock<std::mutex> lock(mutex_);
if (connections_.empty()) {
return nullptr; // 连接池中无可用连接
}
auto conn = connections_.front();
connections_.pop();
return conn;
}
void releaseConnection(std::shared_ptr<sql::Connection> conn) {
std::unique_lock<std::mutex> lock(mutex_);
connections_.push(conn);
}
private:
ConnectionPool() : poolSize_(10) {
try {
sql::mysql::MySQL_Driver* driver;
sql::ConnectOptionsMap connection_properties;
// 设置连接属性,例如用户名、密码等
connection_properties["hostName"] = "localhost";
connection_properties["userName"] = "your_username";
connection_properties["password"] = "your_password";
// 创建驱动程序对象并建立连接
driver = sql::mysql::get_mysql_driver_instance();
for (int i = 0; i < poolSize_; ++i) {
std::shared_ptr<sql::Connection> conn(driver->connect(connection_properties));
connections_.push(conn);
}
} catch (sql::SQLException& e) {
// 处理连接异常
}
}
int poolSize_;
std::queue<std::shared_ptr<sql::Connection>> connections_;
std::mutex mutex_;
};
int main() {
ConnectionPool& pool = ConnectionPool::getInstance();
// 获取连接
std::shared_ptr<sql::Connection> conn = pool.getConnection();
if (conn != nullptr) {
try {
// 使用连接执行SQL语句等操作
std::shared_ptr<sql::Statement> stmt(conn->createStatement());
stmt->execute("USE your_database");
stmt->execute("SELECT * FROM your_table");
while (std::shared_ptr<sql::ResultSet> res(stmt->getResultSet())) {
while (res->next()) {
// 处理查询结果
}
res.reset(stmt->getMoreResults() ? stmt->getResultSet() : nullptr);
}
} catch (sql::SQLException& e) {
// 处理数据库操作异常
}
// 释放连接到连接池中
pool.releaseConnection(conn);
}
return 0;
}
要编译和链接这个代码,可以使用以下命令:
g++ -o connection_pool connection_pool.cpp -lmysqlcppconn -std=c++11
确保你的编译环境中已经正确安装了MySQL C++ Connector,并将其链接到你的程序中。然后就可以运行可执行文件 connection_pool
来测试验证连接池功能了。
内容由零声教学AI助手提供,问题来源于学员提问