#ifndef CDBConnPool_h__ #define CDBConnPool_h__ /** * @brief 数据库连接池类 * @version V 1.0.0 * @author * @date 创建时间: 2018-04-17\n * @note 2018-04-17 创建类。\n * @warning * @bug */ #pragma once #include #include #include #include #include #include #include "CDBCommon.h" #include "CDBConnect.h" namespace YADB { class CDBConnPool { private: std::list __BusyConnList;//正在使用的数据库连接列表 std::list __IdleConnList;//没有使用的数据库连接列表 _DB_POOL_SETTING_ __Setting;//数据库连接池设置 std::mutex __mtx;//互斥量 boost::atomic __Running{ true };//线程是否运行的标识 boost::atomic __IsExited{ false };//线程是否已退出的标识 CDBConnect* __pAsyncDBConn;//异步执行线程用的数据库连接 private: /** * @brief 创建一个空闲连接函数。 * @param [out] std::string& Error 错误信息\n * @param [in] bool IsTemp 创建的连接是否是临时的\n * @return 返回创建的连接 * @return >0 成功\n * @return ==0 失败\n * @note * @warning * @bug */ CDBConnect* __CreateIdleConn( std::string& Error, bool IsTemp = false ); /** * @brief 创建异步执行线程所用连接函数。 * @param 无\n * @return 无\n * @note * @warning * @bug */ void __CreateAsyncThrdConn(); /** * @brief 创建异步执行线程所用连接函数。 * @param 无\n * @return 无\n * @note * @warning * @bug */ void __DestroyAsyncThrdConn(); /** * @brief 启动异步执行线程函数。 * @param 无\n * @return 无 * @note * @warning * @bug */ void __StartAsyncThrd(); /** * @brief 停止异步执行线程函数。 * @param 无\n * @return 无 * @note * @warning * @bug */ void __StopAsyncThrd(); protected: /** * @brief 异步执行线程函数。 * @param [in] CDBConnPool* pOwner 线程所属对象\n * @return 无\n * @note * @warning * @bug */ void _AsyncThreadFunc( CDBConnPool* pOwner );//线程函数 void ExecAsyncSql(_ASYNC_SQL_*pData); public: CDBConnPool(); ~CDBConnPool(); /** * @brief 创建数据库连接池函数。 * @param [in] const _DB_POOL_SETTING_& Setting 数据库连接池设置\n * @param [out] std::string& Error 错误信息\n * @return 返回创建数据库连接池是否成功 * @return true 成功 * @return false 失败 * @note * @warning * @bug */ bool Create( const _DB_POOL_SETTING_& Setting, std::string& Error ); bool Create( const _DB_POOL_SETTING_& Setting,bool bAsync, std::string& szError ); /** * @brief 关闭线程池函数。 * @param 无\n * @return 无\n * @note * @warning * @bug */ void Close(); /** * @brief 从连接池中获得一个数据库连接函数。 * @param [out] std::string& Error 错误信息\n * @return 返回获得一个数据库连接是否成功 * @return 0 失败\n * @return !=0 获得的数据库连接\n * @note * @warning * @bug */ CDBConnect* GetDBConnect( std::string& Error ); /** * @brief 归还一个数据库连接到连接池中函数。 * @param [in] CDBConnect* pConn 数据库连接\n * @return 无\n * @note * @warning * @bug */ void GiveBack( CDBConnect* pConn ); /** * @brief 把SQL语句加入异步执行队列函数。 * @param [in] const std::string& strSQL 要执行的SQL语句\n * @return 加入异步执行队列是否成功 * @return true成功 * @return false失败 * @note * @warning * @bug */ bool PushAsync( std::string&& strSQL ); /** * @brief 执行SQL语句返回结果集函数。 * @param [in] const char *szSql SQL语句 * @param [out] CDBResultSet& DBRes 结果集 * @param [out] std::string& Error 错误信息 * @return 返回查询是否成功 * @return true 成功 * @return false 失败 * @note * @warning * @bug */ bool Query( const char *szSql, CDBResultSet& DBRes, std::string& Error ); MYSQL_RES* Query( const char *szSql, std::string& Error ); /** * @brief 执行SQL语句函数。 * @param [in] const char *szSql SQL语句 * @param [out] std::string& Error 错误信息 * @return 返回影响到的记录数量 * @return -1 失败 * @return >=0 成功 * @note * @warning * @bug */ my_ulonglong ExecuteSql( const char *szSql, std::string& Error ); /** * @brief 执行SQL语句并获得ID的函数。 * @param [in] const char *szSql SQL语句 * @param [out] std::string& Error 错误信息 * @return 返回获得的ID * @return <=0 失败 * @return >0 成功 * @note * @warning * @bug */ my_ulonglong ExecuteSqlID( const char *szSql, std::string& Error ); }; } #endif // CDBConnPool_h__