连接池为了解决频繁的创建、销毁所带来的系统开销。
简而言之,就是 自己先创建一定量的连接,然后在需要的时候取出一条连接使用。
当然如果你只有一个线程连接数据库,而且不是实时返回结果,那么你完全不必用连接池。
想一下网络大型游戏服务器,你就明白为什么需要连接池了。
自己敲代码写了一个简单的类,实现连接池,虽然没有mysql++那么强大,但是还是自己有收获。
Csqlpool.h 头文件实现如下:
#pragma once
#include <WinSock2.h>
#include <mysql.h>
#include <list>
#pragma comment( lib , "libmysql.lib" )
using namespace std;
class Csqlpool
{
public:
~Csqlpool(void);
static Csqlpool *GetSqlPool();
bool IniSqlPool( const char *host , const char *name , const char *pwd , unsigned int port , unsigned int conMax ); //初始化连接池
bool SelectDB( MYSQL *sql, const char *DB); //选择数据库
MYSQL *GetConnect(); // 获取连接
void RelConnect(MYSQL *sql) ; // 释放连接
MYSQL_RES* GetQuery( MYSQL *sql , const char *query); //mysql操作 增删查改
void RelQuery(MYSQL_RES *res); //释放MYSQL_RES资