|
@@ -1,292 +1,289 @@
|
|
|
-/**
|
|
|
-* @brief
|
|
|
-数据库连接池类
|
|
|
-
|
|
|
-* @version
|
|
|
-V 1.0.0
|
|
|
-
|
|
|
-* @author
|
|
|
-王益俊
|
|
|
-
|
|
|
-* @date
|
|
|
-创建时间: 2018-04-17\n
|
|
|
-
|
|
|
-* @note
|
|
|
-2018-04-17 创建类。\n
|
|
|
-
|
|
|
-* @warning
|
|
|
-
|
|
|
-* @bug
|
|
|
-
|
|
|
-*/
|
|
|
-
|
|
|
-//#pragma once
|
|
|
-#ifndef YADB_CONNECT_POOL_H
|
|
|
-#define YADB_CONNECT_POOL_H
|
|
|
-
|
|
|
-#include <boost/atomic.hpp>
|
|
|
-#include <boost/thread/thread.hpp>
|
|
|
-#include <boost/lockfree/queue.hpp>
|
|
|
-#include <boost/serialization/singleton.hpp>
|
|
|
-
|
|
|
-#include <list>
|
|
|
-#include <string>
|
|
|
-#include <mutex>
|
|
|
-
|
|
|
-#include "CDBCommon.h"
|
|
|
-#include "CDBConnect.h"
|
|
|
-
|
|
|
-namespace YADB
|
|
|
-{
|
|
|
- class CDBConnPool
|
|
|
- {
|
|
|
- private:
|
|
|
- std::list<CDBConnect*> __BusyConnList;//正在使用的数据库连接列表
|
|
|
- std::list<CDBConnect*> __IdleConnList;//没有使用的数据库连接列表
|
|
|
- _DB_POOL_SETTING_ __Setting;//数据库连接池设置
|
|
|
- std::mutex __mtx;//互斥量
|
|
|
- boost::atomic<bool> __Running{ true };//线程是否运行的标识
|
|
|
- boost::atomic<bool> __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 );//线程函数
|
|
|
- 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 );
|
|
|
- /**
|
|
|
- * @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 加入异步执行队列是否成功\n
|
|
|
- * @return true成功\n
|
|
|
- * @return false失败\n
|
|
|
-
|
|
|
- * @note
|
|
|
-
|
|
|
- * @warning
|
|
|
-
|
|
|
- * @bug
|
|
|
-
|
|
|
- */
|
|
|
- bool PushAsync( const std::string& strSQL );
|
|
|
- /**
|
|
|
- * @brief
|
|
|
- 执行SQL语句返回结果集函数。
|
|
|
-
|
|
|
- * @param [in] const char *szSql SQL语句\n
|
|
|
- * @param [out] CDBResultSet& DBRes 结果集\n
|
|
|
- * @param [out] std::string& Error 错误信息\n
|
|
|
-
|
|
|
- * @return 返回查询是否成功
|
|
|
- * @return true 成功\n
|
|
|
- * @return false 失败\n
|
|
|
-
|
|
|
- * @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语句\n
|
|
|
- * @param [out] std::string& Error 错误信息\n
|
|
|
-
|
|
|
- * @return 返回影响到的记录数量
|
|
|
- * @return -1 失败\n
|
|
|
- * @return >=0 成功\n
|
|
|
-
|
|
|
- * @note
|
|
|
-
|
|
|
- * @warning
|
|
|
-
|
|
|
- * @bug
|
|
|
-
|
|
|
- */
|
|
|
- my_ulonglong ExecuteSql( const char *szSql, std::string& Error );
|
|
|
- };
|
|
|
-}
|
|
|
-
|
|
|
-//单件相关定义
|
|
|
-typedef boost::serialization::singleton<YADB::CDBConnPool> singleton_CDBConnPool;
|
|
|
-#define sDBConnPool singleton_CDBConnPool::get_mutable_instance()
|
|
|
-#define sDBConnPool_const singleton_CDBConnPool::get_const_instance()
|
|
|
-
|
|
|
-#endif
|
|
|
+/**
|
|
|
+* @brief
|
|
|
+数据库连接池类
|
|
|
+
|
|
|
+* @version
|
|
|
+V 1.0.0
|
|
|
+
|
|
|
+* @author
|
|
|
+王益俊
|
|
|
+
|
|
|
+* @date
|
|
|
+创建时间: 2018-04-17\n
|
|
|
+
|
|
|
+* @note
|
|
|
+2018-04-17 创建类。\n
|
|
|
+
|
|
|
+* @warning
|
|
|
+
|
|
|
+* @bug
|
|
|
+
|
|
|
+*/
|
|
|
+
|
|
|
+//#pragma once
|
|
|
+#ifndef YADB_CONNECT_POOL_H
|
|
|
+#define YADB_CONNECT_POOL_H
|
|
|
+
|
|
|
+#include <boost/atomic.hpp>
|
|
|
+#include <boost/thread/thread.hpp>
|
|
|
+#include <boost/lockfree/queue.hpp>
|
|
|
+
|
|
|
+#include <list>
|
|
|
+#include <string>
|
|
|
+#include <mutex>
|
|
|
+
|
|
|
+#include "CDBCommon.h"
|
|
|
+#include "CDBConnect.h"
|
|
|
+
|
|
|
+namespace YADB
|
|
|
+{
|
|
|
+ class CDBConnPool
|
|
|
+ {
|
|
|
+ private:
|
|
|
+ std::list<CDBConnect*> __BusyConnList;//正在使用的数据库连接列表
|
|
|
+ std::list<CDBConnect*> __IdleConnList;//没有使用的数据库连接列表
|
|
|
+ _DB_POOL_SETTING_ __Setting;//数据库连接池设置
|
|
|
+ std::mutex __mtx;//互斥量
|
|
|
+ boost::atomic<bool> __Running{ true };//线程是否运行的标识
|
|
|
+ boost::atomic<bool> __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 );//线程函数
|
|
|
+ public:
|
|
|
+ CDBConnPool();
|
|
|
+ ~CDBConnPool();
|
|
|
+ /**
|
|
|
+ * @brief
|
|
|
+ 创建数据库连接池函数。
|
|
|
+
|
|
|
+ * @param [in] const _DB_POOL_SETTING_& Setting 数据库连接池设置\n
|
|
|
+ * @param [in] bool bAsync 是否创建异步队列及处理线程\n
|
|
|
+ * @param [out] std::string& szError 错误信息\n
|
|
|
+
|
|
|
+ * @return 返回创建数据库连接池是否成功
|
|
|
+ * @return true 成功
|
|
|
+ * @return false 失败
|
|
|
+
|
|
|
+ * @note
|
|
|
+
|
|
|
+ * @warning
|
|
|
+
|
|
|
+ * @bug
|
|
|
+
|
|
|
+ */
|
|
|
+ bool Create( const _DB_POOL_SETTING_& Setting, std::string& szError );
|
|
|
+ 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 加入异步执行队列是否成功\n
|
|
|
+ * @return true成功\n
|
|
|
+ * @return false失败\n
|
|
|
+
|
|
|
+ * @note
|
|
|
+
|
|
|
+ * @warning
|
|
|
+
|
|
|
+ * @bug
|
|
|
+
|
|
|
+ */
|
|
|
+ bool PushAsync( const std::string& strSQL );
|
|
|
+ /**
|
|
|
+ * @brief
|
|
|
+ 执行SQL语句返回结果集函数。
|
|
|
+
|
|
|
+ * @param [in] const char *szSql SQL语句\n
|
|
|
+ * @param [out] CDBResultSet& DBRes 结果集\n
|
|
|
+ * @param [out] std::string& Error 错误信息\n
|
|
|
+
|
|
|
+ * @return 返回查询是否成功
|
|
|
+ * @return true 成功\n
|
|
|
+ * @return false 失败\n
|
|
|
+
|
|
|
+ * @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语句\n
|
|
|
+ * @param [out] std::string& Error 错误信息\n
|
|
|
+
|
|
|
+ * @return 返回影响到的记录数量
|
|
|
+ * @return -1 失败\n
|
|
|
+ * @return >=0 成功\n
|
|
|
+
|
|
|
+ * @note
|
|
|
+
|
|
|
+ * @warning
|
|
|
+
|
|
|
+ * @bug
|
|
|
+
|
|
|
+ */
|
|
|
+ my_ulonglong ExecuteSql( const char *szSql, std::string& Error );
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+#endif
|