ZBLOG

c/c++ 写个mysql连接池 并编译测试验证

下面是一个简单的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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=18225

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?