Browse Source

Merge branch 'master' of chensongchao/ya-serv into master

陈松潮 6 years ago
parent
commit
dad5b41c5e

+ 8 - 14
CMakeLists.txt

@@ -6,10 +6,10 @@ SET(CMAKE_C_COMPILER "/usr/local/bin/gcc")
 SET(CMAKE_CXX_COMPILER "/usr/local/bin/g++")
 
 #输出项目名称
-project(ya-serv)
+project(yals)
 
-message(STATUS "src dir = ${ya-serv_SOURCE_DIR}")
-message(STATUS "binary dir = ${ya-serv_BINARY_DIR}")
+message(STATUS "src dir = ${yals_SOURCE_DIR}")
+message(STATUS "binary dir = ${yals_BINARY_DIR}")
 
 message(STATUS "leoox src dir = ${CMAKE_SOURCE_DIR}")
 
@@ -20,10 +20,10 @@ message(STATUS "CMAKE_CXX_FLAGS_DEBUG = " ${CMAKE_C_FLAGS_DEBUG})
 message(STATUS "CMAKE_CXX_FLAGS_RELEASE = " ${CMAKE_C_FLAGS_RELEASE})
 
 #在项目中显示所有源码
-file(GLOB files_ya-serv ./*.cpp ./*.h ./websocket/* ./db_api/* ./src/* ./src/internal/*
+file(GLOB files_V ./*.cpp ./*.h ./websocket/*  ./src/* ./src/internal/*
     ./module_service/* ./monkey_car/*)
-add_custom_target(files_ya-serv SOURCES ${files_ya-serv})
-MESSAGE(STATUS "module: ya-serv")
+add_custom_target(files_V SOURCES ${files_yals})
+MESSAGE(STATUS "module: yals")  
 
 #g++编译参数
 # 版本
@@ -41,7 +41,7 @@ include_directories("/usr/local/include" "." "usr/include"
     "../dist/include"
     "../rapidjson/include"
     "/usr/local/mysql/include"  "src/" "src/internal/"
-    "websocket/" "db_api/" "module_service/")
+    "websocket/" "module_service/")
 
 
 #编译项目所需源码
@@ -52,12 +52,6 @@ set(SRC_YASL "ant.cpp" "ant.h" "base64.cpp" "base64.h" "card.cpp" "card.h" "cloc
     "select_tool.h" "select_tool.cpp" "loc_point.h" "loc_point.cpp" "line_fit.h" "line_fit.cpp"
     "net-service.h" "net-service.cpp" "loc_tool.h" "loc_tool.cpp"
 
-    "db_api/CDBCommon.h" "db_api/CDBConnect.h" "db_api/CDBConnect.cpp"  "db_api/CjasonCommon.h"
-    "db_api/CDBConnPool.h" "db_api/CDBConnPool.cpp"
-    "db_api/CDBHelper.h" "db_api/CDBHelper.cpp"
-    "db_api/CDBResultSet.h" "db_api/CDBResultSet.cpp"
-    "db_api/CDBSingletonDefine.h"
-
     "src/sio_client.h" "src/sio_client.cpp" "src/sio_message.h"
     "src/sio_socket.h" "src/sio_socket.cpp"
     "src/internal/sio_client_impl.h" "src/internal/sio_client_impl.cpp"
@@ -112,7 +106,7 @@ set(SRC_MODULE
 
 add_executable(${PROJECT_NAME} "main.cpp" ${SRC_YASL}  ${SRC_MODULE})
 
-target_link_libraries (${PROJECT_NAME}  zlog rt ev boost_chrono boost_system boost_thread mysqlclient three_rates)
+target_link_libraries (${PROJECT_NAME}  zlog rt ev boost_chrono boost_system boost_thread mysqlclient three_rates ya_db)
 
 #file(COPY data_reader_antenna.txt DESTINATION ${PROJECT_BINARY_DIR})
 #file(COPY path_tof.txt DESTINATION ${PROJECT_BINARY_DIR})

+ 0 - 108
db_api/CDBCommon.h

@@ -1,108 +0,0 @@
-/**
-* @brief
-数据库公共头文件
-
-* @version
-V 1.0.0
-
-* @author
-王益俊
-
-* @date
-创建时间:  2018-04-19\n
-
-* @note
-2018-04-19  初次创建。\n
-
-* @warning
-
-* @bug
-
-*/
-
-#ifndef DB_COMMON_H
-#define DB_COMMON_H
-
-#include <mysql.h>
-
-namespace YADB
-{
-    //----------------------------------------------------------------------------
-	//                                 数据库错误定义
-	//----------------------------------------------------------------------------
-	const int DB_ERR_NO_ERROR               = 0;//无错误
-	const int DB_ERR_NOT_CONNECT_DB         = -1;//未连接数据库
-	const int DB_ERR_EXCUTE_QUERY           = -1;//执行查询失败
-	const int DB_ERR_QUERY_RES_NOT_INITED   = -1;//查询结果集还未初始化
-
-	//----------------------------------------------------------------------------
-	//                                 其它定义
-	//----------------------------------------------------------------------------
-	const int MAX_ASYNC_EXEC_FAILED_COUNT   = 3;//最大异步执行失败次数
-	const int MAX_ASYNC_QUEQUE_CAPACITY     = 32 * 1024;//异步执行队列最大容量
-
-	/**
-	* @brief
-	数据库连接数枚举
-	*/
-	enum _DB_CONNECT_COUNT_
-	{
-		DCC_MIN_COUNT = 1,//最小连接数
-		DCC_MAX_COUNT = 60,//最大连接数
-	};
-
-	/**
-	* @brief
-	数据库连接设置结构体
-	*/
-    struct _DB_CONN_SETTING_
-	{
-		std::string Host;//数据库主机地址
-		std::string User;//用户名
-		std::string PWD;//密码
-		std::string DBName;//数据库名
-		std::string CharSet;//字符集
-		std::string stmtSQL;//预处理SQL
-		int TimeOut;//连接数据库超时(单位:秒)
-		_DB_CONN_SETTING_()
-		{
-			TimeOut = 0;
-		}
-	};
-
-	/**
-	* @brief
-	数据库连接池设置结构体
-	*/
-	struct _DB_POOL_SETTING_ : public _DB_CONN_SETTING_
-	{
-		int PoolSize;//连接池大小
-		_DB_POOL_SETTING_()
-		{
-			PoolSize = 0;
-		}
-	};
-
-    /**
-    * @brief
-    异步执行结构体
-    */
-	struct _ASYNC_SQL_
-	{
-		int FailedCount;//执行失败次数
-		std::string SQL; //SQ语句
-		_ASYNC_SQL_()
-		{
-			FailedCount = 0;
-		}
-		~_ASYNC_SQL_()
-		{
-
-		}
-	};
-}
-
-#endif
-
-
-

+ 0 - 365
db_api/CDBConnPool.cpp

@@ -1,365 +0,0 @@
-#include "CDBConnPool.h"
-#include <boost/bind.hpp>
-
-namespace YADB
-{
-    boost::lockfree::queue<_ASYNC_SQL_*, boost::lockfree::capacity<MAX_ASYNC_QUEQUE_CAPACITY>> __AsyncQueue;//异步执行无锁队列
-
-	CDBConnPool::CDBConnPool()
-	{
-		__pAsyncDBConn = 0;
-	}
-
-	CDBConnPool::~CDBConnPool()
-	{
-		Close();
-	}
-
-	CDBConnect * CDBConnPool::__CreateIdleConn( std::string& ConnErr, bool IsTemp )
-	{
-		//std::string ConnErr;
-
-		_DB_CONN_SETTING_ ConnSetting = static_cast< _DB_CONN_SETTING_ >(__Setting);
-		CDBConnect* pConn = new CDBConnect( IsTemp );
-		if ( !pConn->Connect( ConnSetting, ConnErr ) )
-		{
-			delete pConn;
-			pConn = 0;
-			return 0;
-		}
-
-		//如果设置了预处理SQL要准备预处理
-		if ( !ConnSetting.stmtSQL.empty() )
-		{
-			if ( !pConn->Preparestmt( ConnSetting.stmtSQL.c_str(), ConnErr ) )
-			{
-				delete pConn;
-				pConn = 0;
-				return 0;
-			}
-		}
-
-		__IdleConnList.push_back( pConn );
-		return pConn;
-	}
-
-	bool CDBConnPool::Create( const _DB_POOL_SETTING_& Setting, std::string& szError )
-	{
-		return Create(Setting,true,szError);
-	}
-
-	bool CDBConnPool::Create( const _DB_POOL_SETTING_& Setting,bool bAsync, std::string& szError )
-	{
-		std::unique_lock<std::mutex> lock( __mtx );
-
-		if ( Setting.PoolSize < DCC_MIN_COUNT )
-		{
-			szError = "PoolSize is too small!";
-			return false;
-		}
-
-		if ( Setting.PoolSize > DCC_MAX_COUNT )
-		{
-			szError = "PoolSize is too big!";
-			return false;
-		}
-
-		__Setting = Setting;
-		for ( int i = 0; i < __Setting.PoolSize; i++ )
-		{
-			CDBConnect* pConn = __CreateIdleConn( szError );
-			if ( !pConn )
-			{
-				return false;
-			}
-		}
-		if (bAsync)
-		{
-			//创建异步执行线程
-			__CreateAsyncThrdConn();
-
-			//启动异步执行线程
-			__StartAsyncThrd();
-		}
-		return true;
-	}
-
-	void CDBConnPool::Close()
-	{
-		std::unique_lock<std::mutex> lock( __mtx );
-
-		//停止异步执行线程
-		__StopAsyncThrd();
-
-		//刪除异步执行线程连接
-		__DestroyAsyncThrdConn();
-
-		//把所有列表中的连接对象都关闭删除并清除列表
-		CDBConnect* pConn = 0;
-		std::list<CDBConnect*>::iterator lit_conn;
-		for ( lit_conn = __BusyConnList.begin(); lit_conn != __BusyConnList.end(); lit_conn++ )
-		{
-			pConn = *lit_conn;
-			pConn->Close();
-			delete pConn;
-			pConn = 0;
-		}
-		__BusyConnList.clear();
-
-		for ( lit_conn = __IdleConnList.begin(); lit_conn != __IdleConnList.end(); lit_conn++ )
-		{
-			pConn = *lit_conn;
-			pConn->Close();
-			delete pConn;
-			pConn = 0;
-		}
-		__IdleConnList.clear();
-	}
-
-	CDBConnect * CDBConnPool::GetDBConnect( std::string& Error )
-	{
-		std::unique_lock<std::mutex> lock( __mtx );
-
-		CDBConnect* pConn = 0;
-
-		if ( __IdleConnList.size() > 0 )
-		{
-			pConn = *(__IdleConnList.begin());
-			__IdleConnList.pop_front();
-			__BusyConnList.push_back( pConn );
-		}
-		else
-		{
-			//如果已经没有空闲连接,只要当前连接池数量没有超过最大连接数就创建一个临时连接
-			// 这个判断没有意义(进入这个 __IdleConnList.size() <= 0 )
-			if ( __IdleConnList.size() < DCC_MAX_COUNT )
-			{
-				pConn = __CreateIdleConn( Error, true );
-				if ( !pConn )
-				{
-					Error = "Error,failed connect to database!";
-					return 0;
-				}
-
-				__IdleConnList.pop_front();				//zzj, ERROR!!,应该是pop_back吧
-				__BusyConnList.push_back( pConn );
-			}
-			else
-			{
-				Error = "Error,db connect count beyond the max connect count!";
-				return 0;
-			}
-		}
-
-		//验证看数据库连接是否还有效 //zzj, 新建的链接不需要测试
-		if ( pConn )
-		{
-			if ( pConn->ConnctionTest( Error ) != 0 )
-			{
-				//重连一次
-				_DB_CONN_SETTING_ ConnSetting = static_cast< _DB_CONN_SETTING_ >(__Setting);
-				pConn->Close();
-				int nRet = pConn->Connect( ConnSetting, Error );
-				if ( nRet < 0 )
-				{
-					GiveBack( pConn );
-					Error = "Error,failed connect to database!";
-					return 0;
-				}
-			}
-		}
-
-		return pConn;
-	}
-
-	//zzj, 建议使用栈展开的方式 自动回收
-	void CDBConnPool::GiveBack( CDBConnect * pConn )
-	{
-		std::unique_lock<std::mutex> lock( __mtx );
-
-		if ( 0 == pConn )
-		{
-			return;
-		}
-
-		__BusyConnList.remove( pConn );
-
-		//如果是临时连接,直接删除不再放入到空闲连接列表中
-		if ( pConn->IsTemp() )
-		{
-			delete pConn;
-			pConn = 0;
-		}
-		else
-		{
-			__IdleConnList.push_back( pConn );
-		}
-	}
-
-    void CDBConnPool::_AsyncThreadFunc( CDBConnPool* pOwner )
-    {
-    	std::string Error;
-    	while( pOwner->__Running )
-	    {
-    		_ASYNC_SQL_* pData = 0;
-		
-    		while ( __AsyncQueue.pop( pData ) )
-			{
-				if ( pData )
-				{
-					if ( __pAsyncDBConn )
-					{
-						my_ulonglong llRes = 0;
-						llRes = __pAsyncDBConn->ExecuteRealSql( pData->SQL.c_str(), Error ); 
-						if ( (my_ulonglong)-1 == llRes )
-						{
-							//Execute failed, write log...
-							printf( "Error,调用ExcuteRealSql失败,Err=%s \n sql=%s \n", Error.c_str(),  pData->SQL.c_str());
-							//如果失败了看是不是数据库断开连接了,尝试重新连接一次
-							if ( __pAsyncDBConn->ConnctionTest( Error ) != 0 )
-							{
-								_DB_CONN_SETTING_ ConnSetting = static_cast< _DB_CONN_SETTING_ >(__Setting);
-								__pAsyncDBConn->Close();
-								int nRet = __pAsyncDBConn->Connect( ConnSetting, Error );
-								if ( nRet < 0 )
-								{
-									Error = "Error,failed connect to database!";
-									//Connect failed, write log...
-									printf( "Error,failed connect to database,Err=%s\n", Error.c_str() );
-									//如果连接失败了休息一下
-									boost::this_thread::sleep( boost::posix_time::milliseconds( 100 ) );
-								}
-							}
-
-							//如果执行失败,失败次数加一,失败次数小于最大失败次数放到队尾下次再执行
-							pData->FailedCount++;
-							if ( pData->FailedCount < MAX_ASYNC_EXEC_FAILED_COUNT )
-							{
-								_ASYNC_SQL_* pNewData = new _ASYNC_SQL_();
-								pNewData->FailedCount = pData->FailedCount;
-								pNewData->SQL         = pData->SQL;
-								__AsyncQueue.push( pNewData );
-							}
-						}
-					}
-
-					delete pData;
-					pData = 0;
-				}
-			}
-
-    		boost::this_thread::sleep( boost::posix_time::microseconds( 10 ) );
-	    }
-
-    	//线程退出
-    	__IsExited = true;
-    }
-
-    void CDBConnPool::__StopAsyncThrd()
-    {
-    	if ( !__Running )
-    	{
-            return;
-    	}
-
-    	//等待异步执行线程退出
-	    __Running = false;
-
-	    while ( !__IsExited )
-	    {
-		    boost::this_thread::sleep(boost::posix_time::millisec(1));
-	    }
-
-	    //把异步执行无锁队列中每个元素释放
-	    _ASYNC_SQL_* pData = 0;
-		while ( __AsyncQueue.pop( pData ) )
-		{
-			if (pData)
-			{
-				delete pData;
-				pData = 0;
-			}
-		}
-    }
-
-	void CDBConnPool::__StartAsyncThrd()
-	{
-		boost::thread thrd( boost::bind( &CDBConnPool::_AsyncThreadFunc, this, this ) );
-		thrd.detach();
-	}
-
-	void CDBConnPool::__CreateAsyncThrdConn()
-	{
-		std::string ConnErr;
-
-		_DB_CONN_SETTING_ ConnSetting = static_cast< _DB_CONN_SETTING_ >(__Setting);
-		CDBConnect* pConn = new CDBConnect();
-		if ( !pConn->Connect( ConnSetting, ConnErr ) )
-		{
-			delete pConn;
-			pConn = 0;
-			return;
-		}
-
-		__pAsyncDBConn = pConn;
-	}
-
-	void CDBConnPool::__DestroyAsyncThrdConn()
-	{
-        if ( __pAsyncDBConn )
-        {
-        	__pAsyncDBConn->Close();
-        	delete __pAsyncDBConn;
-        	__pAsyncDBConn = 0;
-        }
-	}
-
-    bool CDBConnPool::PushAsync( const std::string& strSQL )
-    {
-    	_ASYNC_SQL_* pData = new _ASYNC_SQL_;
-    	if ( !pData )
-    	{
-            return false;
-    	}
-
-    	pData->SQL = strSQL;
-    	return __AsyncQueue.push( pData );
-    }
-
-    bool CDBConnPool::Query( const char *szSql, CDBResultSet& DBRes,std::string& Error )
-	{
-		CDBConnect *pConn = GetDBConnect( Error );
-		if ( 0 == pConn )
-		{
-			return false;
-		}
-
-		MYSQL_RES* pRes = pConn->Query( szSql, Error );
-		GiveBack( pConn );
-		return DBRes.Bind( pRes, Error );
-	}
-    
-    MYSQL_RES* CDBConnPool::Query( const char *szSql, std::string& Error)
-    {
-        CDBConnect *pConn = GetDBConnect(Error);
-        if( 0 == pConn){
-            return nullptr;
-        }
-
-        MYSQL_RES* pRes = pConn->Query(szSql,Error);
-        GiveBack(pConn);
-        return pRes;
-    }
-    my_ulonglong CDBConnPool::ExecuteSql( const char *szSql, std::string& Error )
-	{
-		CDBConnect *pConn = GetDBConnect( Error );
-		if ( 0 == pConn )
-		{
-			return -1;
-		}
-		my_ulonglong nRet = pConn->ExecuteSql( szSql, Error );
-		GiveBack( pConn );
-		return nRet;
-		//return pConn->ExecuteSql( szSql, Error );
-	}
-}

+ 0 - 289
db_api/CDBConnPool.h

@@ -1,289 +0,0 @@
-/**
-* @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

+ 0 - 293
db_api/CDBConnect.cpp

@@ -1,293 +0,0 @@
-#include "CDBConnect.h"
-#include <string.h>
-
-namespace YADB
-{
-	CDBConnect::CDBConnect( bool IsTemp )
-	{
-		__pConn  = 0;
-		__IsTemp = IsTemp;
-		__pstmt  = 0;
-	}
-
-
-	CDBConnect::~CDBConnect()
-	{
-		Close();
-	}
-
-	bool CDBConnect::Connect( const _DB_CONN_SETTING_ & DBSetting, std::string & Error )
-	{
-		//创建
-		__pConn = mysql_init( NULL );
-
-		//超时设置
-		if ( mysql_options( __pConn, MYSQL_OPT_CONNECT_TIMEOUT, &(DBSetting.TimeOut) ) != 0 )
-		{
-			Error = "Failed to call mysql_options,";
-			Error += " LastError=";
-			Error += GetLastError();
-			return false;
-		}
-
-		//设置字符集
-		if ( mysql_set_character_set( __pConn, DBSetting.CharSet.c_str() ) != 0 )
-		{
-			Error = "Failed to call mysql_set_character_set,";
-			Error += " LastError=";
-			Error += GetLastError();
-			return false;
-		}
-
-		//连接数据库
-		if ( !mysql_real_connect( __pConn, DBSetting.Host.c_str(), DBSetting.User.c_str(), DBSetting.PWD.c_str(), DBSetting.DBName.c_str(), 0, NULL, 0 ) )
-		{
-			Error = "Failed to connect database,";
-			Error += " LastError=";
-			Error += GetLastError();
-			return false;
-		}
-		//依靠 mysql_ping 无法做到重连
-		char value = 1;
-		mysql_options(__pConn, MYSQL_OPT_RECONNECT, &value);
-
-		return true;
-	}
-
-	void CDBConnect::Close()
-	{
-		stmtClose();
-
-		if ( __pConn )
-		{
-			mysql_close( __pConn );
-			__pConn = 0;
-		}
-	}
-
-	int CDBConnect::ConnctionTest( std::string& Error )
-	{
-		int nRet = -1;
-
-		if ( 0 == __pConn )
-		{
-			Error = "Error,not connected to database!";
-			nRet = DB_ERR_NOT_CONNECT_DB;
-		}
-		else
-		{
-			nRet = mysql_ping( __pConn );
-			if ( nRet != 0 )
-			{
-				Error = "Failed to mysql_ping,";
-				Error += " LastError=";
-				Error += GetLastError();
-			}			
-		}
-
-		return nRet;
-	}
-
-	int CDBConnect::AutoCommit( bool Mode, std::string& Error )
-	{
-		if ( 0 == __pConn )
-		{
-			Error = "Error,not connected to database!";
-			return DB_ERR_NOT_CONNECT_DB;
-		}
-
-		return mysql_autocommit( __pConn, Mode );
-	}
-
-	int CDBConnect::Commit( std::string& Error )
-	{
-		if ( 0 == __pConn )
-		{
-			Error = "Error,not connected to database!";
-			return DB_ERR_NOT_CONNECT_DB;
-		}
-
-		return mysql_commit( __pConn );
-	}
-
-	int CDBConnect::RollBack( std::string& Error )
-	{
-		if ( 0 == __pConn )
-		{
-			Error = "Error,not connected to database!";
-			return DB_ERR_NOT_CONNECT_DB;
-		}
-
-		return mysql_rollback( __pConn );
-	}
-
-	CDBResultSet * CDBConnect::ExecuteQuery( const char * szSql, std::string & Error )
-	{
-		if ( 0 == __pConn )
-		{
-			Error = "Error,not connected to database!";
-			return 0;
-		}
-
-		if ( mysql_query( __pConn, szSql ) )
-		{
-			Error = "Failed to execute SQL!";
-			Error += " LastError=";
-			Error += GetLastError();
-			return 0;
-		}
-
-		if ( !__RessultSet.Bind( mysql_store_result( __pConn ), Error ) )
-		{
-			return 0;
-		}
-
-		return &__RessultSet;
-	}
-
-	MYSQL_RES* CDBConnect::Query( const char *szSql, std::string& Error )
-	{
-		if ( 0 == __pConn )
-		{
-			Error = "Error,not connected to database!";
-			return 0;
-		}
-
-		if ( mysql_query( __pConn, szSql ) )
-		{
-			Error = "Failed to execute SQL!";
-			Error += " LastError=";
-			Error += GetLastError();
-			return 0;
-		}
-
-		return mysql_store_result( __pConn );
-	}
-
-	my_ulonglong CDBConnect::ExecuteSql( const char * szSql, std::string& Error )
-	{
-		if ( 0 == __pConn )
-		{
-			Error = "Error,not connected to database!";
-			return DB_ERR_NOT_CONNECT_DB;
-		}
-
-		if ( mysql_query( __pConn, szSql ) )
-		{
-			Error = "Failed to execute SQL!";
-			Error += " LastError=";
-			Error += GetLastError();
-			return DB_ERR_EXCUTE_QUERY;
-		}
-
-		return mysql_affected_rows( __pConn );
-	}
-
-	my_ulonglong CDBConnect::ExecuteRealSql( const char * szSql, std::string & Error )
-	{
-		if ( 0 == __pConn )
-		{
-			Error = "Error,not connected to database!";
-			return DB_ERR_NOT_CONNECT_DB;
-		}
-
-		unsigned long uSqlLen = strlen( szSql );
-		if ( mysql_real_query( __pConn, szSql, uSqlLen ) )
-		{
-			Error = "Failed to execute SQL,";
-			Error += " LastError=";
-			Error += GetLastError();
-			return DB_ERR_EXCUTE_QUERY;
-		}
-
-		return mysql_affected_rows( __pConn );
-	}
-
-	const char * CDBConnect::GetLastError()
-	{
-		if ( 0 == __pConn )
-		{
-			return "";
-		}
-
-		return mysql_error( __pConn );
-	}
-
-	my_ulonglong CDBConnect::GetLastInsertID( std::string& Error )
-	{
-		if ( 0 == __pConn )
-		{
-			Error = "Error,not connected to database!";
-			return DB_ERR_NOT_CONNECT_DB;
-		}
-
-		return mysql_insert_id( __pConn  );
-	}
-
-	bool CDBConnect::IsTemp()
-	{
-		return __IsTemp;
-	}
-
-	bool CDBConnect::Preparestmt( const char *szSql, std::string & Error )
-	{
-		if ( 0 == __pConn )
-		{
-			Error = "Error,not connected to database!";
-			return DB_ERR_NOT_CONNECT_DB;
-		}
-
-		stmtClose();
-
-		__pstmt = mysql_stmt_init( __pConn );
-
-		if ( mysql_stmt_prepare( __pstmt, szSql, strlen( szSql ) ) != 0 )
-		{
-			Error = "Error, failed to mysql_stmt_prepare!";
-			Error += " LastError=";
-			Error += GetLastError();
-			return false;
-		}
-
-		return true;
-	}
-
-	bool CDBConnect::stmtExcute( MYSQL_BIND *stBinds, uint64_t * piId, std::string & Error )
-	{
-		if ( __pstmt == NULL )
-		{
-			Error = "Bind error, not called Preparestmt function!";
-			return false;
-		}
-
-		if ( mysql_stmt_bind_param( __pstmt, stBinds ) != 0 )
-		{
-			Error = "mysql_stmt_bind_param error,";
-			Error += mysql_stmt_error( __pstmt );
-			return false;
-		}
-
-		if ( mysql_stmt_execute( __pstmt ) != 0 )
-		{
-			Error = "mysql_stmt_execute error,";
-			Error += mysql_stmt_error( __pstmt );
-			return false;
-		}
-
-		if ( piId )
-		{
-			*piId = mysql_stmt_insert_id( __pstmt );
-		}
-
-		return true;
-	}
-
-	void CDBConnect::stmtClose()
-	{
-		if ( __pstmt )
-		{
-			mysql_stmt_close( __pstmt );
-			__pstmt = 0;
-		}
-	}
-}

+ 0 - 332
db_api/CDBConnect.h

@@ -1,332 +0,0 @@
-/**
-* @brief
-数据库连接类
-
-* @version
-V 1.0.0
-
-* @author
-王益俊
-
-* @date
-创建时间:  2018-04-17\n
-
-* @note
-2018-04-17  创建类。\n
-
-* @warning
-
-* @bug
-
-*/
-
-#pragma once
-
-#include <string>
-#include <mysql.h>
-#include "CDBResultSet.h"
-#include "CDBCommon.h"
-
-namespace YADB
-{
-	class CDBConnect
-	{
-	private:
-    	MYSQL * __pConn;//数据库连接
-    	CDBResultSet __RessultSet;//结果集
-    	bool __IsTemp;//是否是临时的(如果是临时使用的,归还到连接池中时会自动删除,以保持总体连接数不变)
-    	MYSQL_STMT *__pstmt;//预处理
-	public:
-		CDBConnect( bool IsTemp = false );
-		~CDBConnect();
-		/**
-		* @brief
-		连接数据库函数。
-
-		* @param  [in] const _DB_POOL_SETTING_& Setting  数据库连接设置\n
-		* @param  [out] std::string& Error  错误信息\n
-
-		* @return 返回连接数据库是否成功
-		* @return  true   成功\n
-		* @return  false  失败\n
-
-		* @note
-
-		* @warning
-
-		* @bug
-
-		*/
-		bool Connect( const _DB_CONN_SETTING_& DBSetting, 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
-
-	    */
-		int ConnctionTest( std::string& Error );
-		/**
-	    * @brief
-	    设置自动提交的函数。
-
-	    * @param [in] bool Mode 是否是否自动提交\n
-	    * @param [out] std::string& Error 错误信息\n
-
-	    * @return 返回设置自动提交是否成功
-	    * @return  0  成功\n
-	    * @return  !=0  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		int AutoCommit( bool Mode, std::string& Error );
-		/**
-	    * @brief
-	    提交函数。
-
-	    * @param [out] std::string& Error 错误信息\n
-
-	    * @return 返回提交是否成功
-	    * @return  0  成功\n
-	    * @return  !=0  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		int Commit( std::string& Error  );
-		/**
-	    * @brief
-	    回滚函数。
-
-	    * @param [out] std::string& Error  错误信息\n
-
-	    * @return 返回回滚是否成功
-	    * @return  0  成功\n
-	    * @return  !=0  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		int RollBack( std::string& Error );
-		/**
-	    * @brief
-	    执行SQL语句返回结果集函数。
-
-	    * @param [in] const char *szSql  SQL语句\n
-	    * @param [out] std::string& Error  错误信息\n
-
-	    * @return 返回结果集
-	    * @return  0  失败\n
-	    * @return  !=0  成功\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		CDBResultSet* ExecuteQuery( const char *szSql, std::string& Error );
-		/**
-	    * @brief
-	    执行SQL语句返回mysql原始结果集函数。
-
-	    * @param [in] const char *szSql  SQL语句\n
-	    * @param [out] std::string& Error  错误信息\n
-
-	    * @return 返回的mysql原始结果集
-	    * @return  ==0  失败\n
-	    * @return  !=0  成功\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		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 );
-		/**
-	    * @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 ExecuteRealSql( const char *szSql, std::string& Error );
-		/**
-	    * @brief
-	    获得最后一次错误信息函数。
-
-	    * @param 无\n
-
-	    * @return 返回最后一次错误
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		const char* GetLastError();
-		/**
-	    * @brief
-	    获得最后一次插入的ID函数。
-
-	    * @param [out] std::string& Error  错误信息\n
-
-	    * @return 返回最后一次插入的ID
-	    * @return  -1  失败\n
-	    * @return  >=0  成功\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		my_ulonglong GetLastInsertID( std::string& Error );
-		/**
-		* @brief
-		获得是否是临时的连接函数。
-
-		* @param 无\n
-
-		* @return 返回是否是临时的
-
-		* @note
-
-		* @warning
-
-		* @bug
-
-		*/
-		bool IsTemp();
-		/**
-	    * @brief
-	    准备stmt函数。
-
-	    * @param const char *szSql 预处理SQL语句\n
-	    * @param [out] std::string& Error  错误信息\n
-
-	    * @return 返回准备stmt是否成功
-	    * @return  false  失败\n
-	    * @return  true  成功\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool Preparestmt( const char *szSql, std::string& Error );
-		/**
-	    * @brief
-	    执行stmt函数。
-
-	    * @param [in] MYSQL_BIND *stBinds  要执行的BIND\n
-	    * @param [in] uint64_t *piId  执行后获得的ID\n
-	    * @param [out] std::string& Error  错误信息\n
-
-	    * @return 返回执行stmt成功还是失败
-	    * @return  false  失败\n
-	    * @return  true  成功\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool stmtExcute( MYSQL_BIND *stBinds, uint64_t *piId, std::string& Error );
-		/**
-	    * @brief
-	    关闭stmt函数。
-
-	    * @param 无\n
-
-	    * @return 无\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		void stmtClose();
-	};
-}

+ 0 - 45
db_api/CDBHelper.cpp

@@ -1,45 +0,0 @@
-#include "CDBHelper.h"
-#include <stdio.h>
-#include <string.h>
-
-namespace YADB
-{
-	CDBHelper::CDBHelper()
-	{
-
-	}
-
-	CDBHelper::~CDBHelper()
-	{
-
-	}
-
-	void CDBHelper::String2DateTime( const char* szString, MYSQL_TIME & value )
-	{
-		sscanf( szString, "%d-%d-%d %d:%d:%d", &value.year, &value.month, &value.day, &value.hour, &value.minute, &value.second );
-		value.second_part = 0;//microseconds
-		value.neg = false;
-		value.time_type = MYSQL_TIMESTAMP_DATE;
-	}
-
-	void CDBHelper::DateTime2String( const MYSQL_TIME & value, char * szString, int Length )
-	{
-		char szTemp[20] = { 0 };
-		sprintf( szTemp, "%d-%d-%d %02d:%02d:%02d", \
-			value.year, value.month, value.day, value.hour, value.minute, value.second );
-		strncpy( szString, szTemp, Length );
-	}
-
-	void CDBHelper::InitMySQLTime( MYSQL_TIME & value )
-	{
-		value.year         = 0;
-		value.month        = 0;
-		value.day          = 0;
-		value.hour         = 0;
-		value.minute       = 0;
-		value.second       = 0;
-		value.neg          = false;
-		value.second_part  = 0;
-		value.time_type    = MYSQL_TIMESTAMP_DATETIME;
-	}
-}

+ 0 - 86
db_api/CDBHelper.h

@@ -1,86 +0,0 @@
-/**
-* @brief
-数据库助手类
-
-* @version
-V 1.0.0
-
-* @author
-王益俊
-
-* @date
-创建时间:  2018-04-19\n
-
-* @note
-2018-04-19  创建类。\n
-
-* @warning
-
-* @bug
-
-*/
-
-#pragma once
-
-#include <mysql.h>
-
-namespace YADB
-{
-	class CDBHelper
-	{
-	public:
-		CDBHelper();
-		~CDBHelper();
-		/**
-	    * @brief
-	    把时间字符串转成MYSQL_TIME的函数。
-
-	    * @param  [in] char* szdtString  时间字符串\n
-	    * @param  [out] MYSQL_TIME & value  转换好的MYSQL_TIME类型的值\n
-
-	    * @return 无\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		void String2DateTime( const char* szString, MYSQL_TIME & value );
-		/**
-	    * @brief
-	    把MYSQL_TIME转成时间字符串转成函数。
-
-	    * @param  [in] MYSQL_TIME & value  要转换的MYSQL_TIME类型的值\n
-	    * @param  [out] char* szdtString  时间字符串\n
-
-	    * @return 无\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		void DateTime2String( const MYSQL_TIME & value, char* szString, int Length );
-		/**
-		* @brief
-		把MYSQL_TIME初始化函数。
-
-		* @param  [out] MYSQL_TIME & value  要初始化的MYSQL_TIME值\n
-
-		* @return 无\n
-
-		* @note
-
-		* @warning
-
-		* @bug
-
-		*/
-		void InitMySQLTime( MYSQL_TIME & value );
-	};
-
-}

+ 0 - 451
db_api/CDBResultSet.cpp

@@ -1,451 +0,0 @@
-#include "CDBResultSet.h"
-#include <string.h>
-
-namespace YADB
-{
-	CDBResultSet::CDBResultSet()
-	{
-		__pQueryRes  = 0;
-		__CurRow     = 0;
-		__FieldCount = 0;
-	}
-
-	CDBResultSet::~CDBResultSet()
-	{
-		Close();
-	}
-
-	void CDBResultSet::__BuildFNameIdxLst()
-	{
-		if (0 == __pQueryRes)
-		{
-			return;
-		}
-
-		for ( int i = 0; i < __FieldCount; i++ )
-		{
-			MYSQL_FIELD *pField = mysql_fetch_field_direct( __pQueryRes, i );
-			if ( pField == NULL )
-			{
-				continue;
-			}
-
-			__FNameIndexList.insert( std::make_pair( pField->name, i ) );
-		}
-	}
-
-	bool CDBResultSet::Bind( MYSQL_RES *pQueryRes, std::string& Error )
-	{
-		Close();
-
-		__pQueryRes = pQueryRes;
-		if ( __pQueryRes != 0 )
-		{
-			__FieldCount = mysql_num_fields( pQueryRes );
-		}
-		else
-		{
-			Error = "Error,pQueryRes is null!";
-			__FieldCount = 0;
-			return false;
-		}
-
-		__BuildFNameIdxLst();
-
-		return true;
-	}
-
-	void CDBResultSet::Close()
-	{
-		if ( 0 == __pQueryRes )
-		{
-			return;
-		}
-
-		mysql_free_result( __pQueryRes );
-		__pQueryRes  = 0;
-		__CurRow     = 0;
-		__FieldCount = 0;
-		__FNameIndexList.clear();
-	}
-
-	bool CDBResultSet::SeekData( my_ulonglong Offset, std::string& Error )
-	{
-		if ( 0 == __pQueryRes )
-		{
-			Error = "Error,__pQueryRes is not initialized!";
-			return false;
-		}
-
-		mysql_data_seek( __pQueryRes, Offset );
-
-		return true;
-	}
-
-	bool CDBResultSet::GetNextRecod( std::string & Error )
-	{
-		if ( 0 == __pQueryRes )
-		{
-			Error = "Error,__pQueryRes is not initialized!";
-			return false;
-		}
-
-		if ( ( __CurRow = mysql_fetch_row( __pQueryRes ) ) != NULL )
-		{
-			return true;
-		}
-		else
-		{
-			Error = "Error, failed to mysql_fetch_row!";
-			return false;
-		}
-
-		return true;
-	}
-
-	my_ulonglong CDBResultSet::GetRecordCount( std::string & Error )
-	{
-		if ( 0 == __pQueryRes )
-		{
-			Error = "Error,__pQueryRes is not initialized!";
-			return DB_ERR_QUERY_RES_NOT_INITED;
-		}
-
-		return mysql_num_rows( __pQueryRes );
-	}
-
-	bool CDBResultSet::__GetField( int fdIndex, char*& szValue, bool& IsNull, std::string& Error )
-	{
-		IsNull = false;
-
-		if ( 0 == __CurRow )
-		{
-			Error = "Error,__CurRow is not initialized!";
-			return false;
-		}
-
-		if ( fdIndex < 0 || fdIndex >= __FieldCount )
-		{
-			Error = "fdIndex is invalid!";
-			return false;
-		}
-
-		szValue = __CurRow[fdIndex];
-		if ( szValue == NULL || szValue[0] == 0)
-		{
-			IsNull = true;
-		}
-
-		return true;
-	}
-
-	bool CDBResultSet::GetField( int fdIndex, int & value, std::string & Error )
-	{
-		value = 0;
-		char* pField = 0;
-		bool IsNull = false;
-        if ( !__GetField( fdIndex, pField, IsNull, Error ) )
-        {
-            return false;
-        }
-
-        if ( !IsNull )
-        {
-        	value = atoi( pField );
-        }
-
-		return true;
-	}
-
-	bool CDBResultSet::GetField( int fdIndex, unsigned int & value, std::string & Error )
-	{
-		value = 0;
-		char* pField = 0;
-		bool IsNull = false;
-		if ( !__GetField( fdIndex, pField, IsNull, Error ) )
-		{
-			return false;
-		}
-
-		if ( !IsNull )
-		{
-			value = atoi( pField );
-		}
-
-		return true;
-	}
-
-	bool CDBResultSet::GetField( int fdIndex, long long & value, std::string & Error )
-	{
-		value = 0;
-		char* pField = 0;
-		bool IsNull = false;
-		if ( !__GetField( fdIndex, pField, IsNull, Error ) )
-		{
-			return false;
-		}
-
-		if ( !IsNull )
-		{
-			value = atoll(pField);
-		}
-
-		return true;
-	}
-
-	bool CDBResultSet::GetField( int fdIndex, std::string & value, std::string & Error )
-	{
-		value = "";
-
-		char* pField = 0;
-		bool IsNull = false;
-		if ( !__GetField( fdIndex, pField, IsNull, Error ) )
-		{
-			return false;
-		}
-
-		if ( !IsNull )
-		{
-			value = pField;
-		}
-
-		return true;
-	}
-
-	bool CDBResultSet::GetField( int fdIndex, char * value, int Length, std::string & Error )
-	{
-		memset( value, 0, Length );
-
-		char* pField = 0;
-		bool IsNull = false;
-		if ( !__GetField( fdIndex, pField, IsNull, Error ) )
-		{
-			return false;
-		}
-
-		if ( !IsNull )
-		{
-			strncpy( value, pField, Length );
-		}
-
-		return true;
-	}
-
-	bool CDBResultSet::GetField( int fdIndex, bool & value, std::string & Error )
-	{
-		value = false;
-		char* pField = 0;
-		bool IsNull = false;
-		if ( !__GetField( fdIndex, pField, IsNull, Error ) )
-		{
-			return false;
-		}
-
-		if ( !IsNull )
-		{
-			value = atoi( pField );
-		}
-
-		return true;
-	}
-
-	bool CDBResultSet::GetField( int fdIndex, float & value, std::string & Error )
-	{
-		value = 0.0;
-		char* pField = 0;
-		bool IsNull = false;
-		if ( !__GetField( fdIndex, pField, IsNull, Error ) )
-		{
-			return false;
-		}
-
-		if ( !IsNull )
-		{
-			value = atof( pField );
-		}
-
-		return true;
-    }
-
-	bool CDBResultSet::GetField( int fdIndex, double & value, std::string & Error )
-	{
-		value = 0.0;
-		char* pField = 0;
-		bool IsNull = false;
-		if (!__GetField( fdIndex, pField, IsNull, Error ) )
-		{
-			return false;
-		}
-
-		if ( !IsNull )
-		{
-			value = std::stod( pField );
-		}
-
-		return true;
-	}
-
-	bool CDBResultSet::GetField( int fdIndex, MYSQL_TIME & value, std::string & Error )
-	{
-		__DBHelper.InitMySQLTime( value );
-		char* pField = 0;
-		bool IsNull = false;
-		if ( !__GetField( fdIndex, pField, IsNull, Error ) )
-		{
-			return false;
-		}
-
-		if ( !IsNull )
-		{
-			__DBHelper.String2DateTime( pField, value );
-		}
-
-		return true;
-	}
-
-	int CDBResultSet::GetFdIndexByName( const char * fdName, std::string & Error )
-	{
-		std::map<std::string,int>::iterator mit_fi;
-		mit_fi = __FNameIndexList.find( fdName );
-		if ( mit_fi != __FNameIndexList.end() )
-		{
-			return mit_fi->second;
-		}
-
-		Error = "Failed to find field: ";
-		Error += fdName;
-
-		return -1;
-	}
-
-	bool CDBResultSet::GetField( const char * fdName, int & value, std::string & Error )
-	{
-		int fdIndex = GetFdIndexByName( fdName, Error );
-
-		if ( fdIndex >= 0 )
-		{
-			return GetField( fdIndex, value, Error );
-		}
-
-		return false;
-	}
-
-	bool CDBResultSet::GetField( const char * fdName, long long & value, std::string & Error )
-	{
-		int fdIndex = GetFdIndexByName( fdName, Error );
-
-		if ( fdIndex >= 0 )
-		{
-			return GetField( fdIndex, value, Error );
-		}
-
-		return false;
-	}
-
-	bool CDBResultSet::GetField( const char * fdName, unsigned int & value, std::string & Error )
-	{
-		int fdIndex = GetFdIndexByName( fdName, Error );
-
-		if ( fdIndex >= 0 )
-		{
-			return GetField( fdIndex, value, Error );
-		}
-
-		return false;
-	}
-
-	bool CDBResultSet::GetField( const char * fdName, std::string & value, std::string & Error )
-	{
-		int fdIndex = GetFdIndexByName( fdName, Error );
-
-		if ( fdIndex >= 0 )
-		{
-			return GetField( fdIndex, value, Error );
-		}
-
-		return false;
-	}
-
-	bool CDBResultSet::GetField( const char * fdName, char * value, int Length, std::string & Error )
-	{
-		int fdIndex = GetFdIndexByName( fdName, Error );
-
-		if ( fdIndex >= 0 )
-		{
-			return GetField( fdIndex, value, Length, Error );
-		}
-
-		return false;
-	}
-
-	bool CDBResultSet::GetField( const char * fdName, bool & value, std::string & Error )
-	{
-		int fdIndex = GetFdIndexByName( fdName, Error );
-
-		if ( fdIndex >= 0 )
-		{
-			return GetField( fdIndex, value, Error );
-		}
-
-		return false;
-	}
-
-	bool CDBResultSet::GetField( const char * fdName, float & value, std::string & Error )
-	{
-		int fdIndex = GetFdIndexByName( fdName, Error );
-
-		if ( fdIndex >= 0 )
-		{
-			return GetField( fdIndex, value, Error );
-		}
-
-		return false;
-	}
-
-	bool CDBResultSet::GetField( const char * fdName, double & value, std::string & Error )
-	{
-		int fdIndex = GetFdIndexByName( fdName, Error );
-
-		if ( fdIndex >= 0 )
-		{
-			return GetField( fdIndex, value, Error );
-		}
-
-		return false;
-	}
-
-	bool CDBResultSet::GetField( const char * fdName, MYSQL_TIME & value, std::string & Error )
-	{
-		int fdIndex = GetFdIndexByName( fdName, Error );
-
-		if ( fdIndex >= 0 )
-		{
-			return GetField( fdIndex, value, Error );
-		}
-
-		return false;
-	}
-
-	int CDBResultSet::IsNull( int fdIndex, std::string& Error )
-	{
-		if (0 == __CurRow)
-		{
-			Error = "Error,__CurRow is not initialized!";
-			return -1;
-		}
-
-		if ( fdIndex < 0 || fdIndex >= __FieldCount )
-		{
-			Error = "fdIndex is invalid!";
-			return -1;
-		}
-
-		char* pField = __CurRow[fdIndex];
-		if ( pField == NULL || pField[0] == 0 )
-		{
-			return 1;
-		}
-
-		return 0;
-	}
-}

+ 0 - 573
db_api/CDBResultSet.h

@@ -1,573 +0,0 @@
-/**
-* @brief
-数据库结果集类
-
-* @version
-V 1.0.0
-
-* @author
-王益俊
-
-* @date
-创建时间:  2018-04-18\n
-
-* @note
-2018-04-18  创建类。\n
-
-* @warning
-
-* @bug
-
-*/
-
-#pragma once
-
-#include <string>
-#include <map>
-#include <mysql.h>
-
-#include "CDBCommon.h"
-#include "CDBHelper.h"
-
-namespace YADB
-{
-	class CDBResultSet
-	{
-		friend class CDBConnect;
-
-	private:
-		MYSQL_RES* __pQueryRes;//结果集
-		MYSQL_ROW __CurRow;//当前记录行
-		int __FieldCount;//字段的个数
-		CDBHelper __DBHelper;//助手
-		std::map<std::string,int> __FNameIndexList;//字段名和字段下标对应列表(key是字段名,value是字段下标)
-	private:
-		/**
-		* @brief
-		构建字段名字段下标对应列表函数。
-
-		* @note
-
-		* @warning
-
-		* @bug
-
-		*/
-		void __BuildFNameIdxLst();
-		/**
-		* @brief
-		获得原始字符串值函数。
-
-		* @param  [in] int fdIndex  字段下标\n
-		* @param  [out] char* szValue  获得的原始字符串值\n
-		* @param  [out] bool& IsNull  是否为空\n
-		* @param  [out] std::string& Error  错误信息\n
-
-		* @return 返回获得字段值是否成功
-		* @return  true  成功\n
-		* @return  false  失败\n
-
-		* @note
-
-		* @warning
-
-		* @bug
-
-		*/
-		bool __GetField( int fdIndex, char*& szValue, bool& IsNull, std::string& Error );
-	public:
-		CDBResultSet();
-		~CDBResultSet();
-		/**
-	    * @brief
-	    绑定到一个MYSQL结果集函数。
-
-	    * @param  [in] MYSQL_RES *pQueryRes  MYSQL结果集\n
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回绑定到一个MYSQL结果集是否成功
-	    * @return  true  成功\n
-	    * @return  false  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool Bind( MYSQL_RES *pQueryRes, std::string& Error );
-		/**
-	    * @brief
-	    关闭函数。
-
-	    * @param  无\n
-
-	    * @return 无\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		void Close();
-		/**
-	    * @brief
-	    查找数据函数。
-
-	    * @param  [in] my_ulonglong Offset  偏移量\n
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回查找数据是否成功
-	    * @return  true  成功\n
-	    * @return  false  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool SeekData( my_ulonglong Offset, std::string& Error );
-		/**
-	    * @brief
-	    获得下一条记录函数。
-
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回获得下一条记录是否成功
-	    * @return  true  成功\n
-	    * @return  false  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool GetNextRecod( std::string& Error );
-		/**
-	    * @brief
-	    获得记录数函数。
-
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回获得的记录数
-	    * @return  >=0  成功\n
-	    * @return  -1  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		my_ulonglong GetRecordCount( std::string& Error );
-		/**
-	    * @brief
-	    获得int字段值函数。
-
-	    * @param  [in] int fdIndex  字段下标\n
-	    * @param  [out] int& value  获得的int字段值\n
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回获得字段值是否成功
-	    * @return  true  成功\n
-	    * @return  false  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool GetField( int fdIndex, int& value, std::string& Error );
-		/**
-	    * @brief
-	    获得unsigned int字段值函数。
-
-	    * @param  [in] int fdIndex  字段下标\n
-	    * @param  [out] unsigned int& value  获得的字段值\n
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回获得字段值是否成功
-	    * @return  true  成功\n
-	    * @return  false  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool GetField( int fdIndex, unsigned int& value, std::string& Error );
-		/**
-	    * @brief
-	    获得long long字段值函数。
-
-	    * @param  [in] int fdIndex  字段下标\n
-	    * @param  [out] long long& value  获得的字段值\n
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回获得字段值是否成功
-	    * @return  true  成功\n
-	    * @return  false  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool GetField( int fdIndex, long long& value, std::string& Error );
-		/**
-	    * @brief
-	    获得std::string字段值函数。
-
-	    * @param  [in] int fdIndex  字段下标\n
-	    * @param  [out] std::string& value  获得的字段值\n
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回获得字段值是否成功
-	    * @return  true  成功\n
-	    * @return  false  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool GetField( int fdIndex, std::string& value, std::string& Error );
-		/**
-	    * @brief
-	    获得char*字段值函数。
-
-	    * @param  [in] int fdIndex  字段下标\n
-	    * @param  [out] char* value  获得的字段值\n
-	    * @param  [in] int Length  value的最大长度\n
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回获得字段值是否成功
-	    * @return  true  成功\n
-	    * @return  false  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool GetField( int fdIndex, char* value, int Length, std::string& Error );
-		/**
-	    * @brief
-	    获得bool字段值函数。
-
-	    * @param  [in] int fdIndex  字段下标\n
-	    * @param  [out] bool& value  获得的字段值\n
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回获得字段值是否成功
-	    * @return  true  成功\n
-	    * @return  false  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool GetField( int fdIndex, bool& value, std::string& Error );
-		/**
-	    * @brief
-	    获得float字段值函数。
-
-	    * @param  [in] int fdIndex  字段下标\n
-	    * @param  [out] float& value  获得的字段值\n
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回获得字段值是否成功
-	    * @return  true  成功\n
-	    * @return  false  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool GetField( int fdIndex, float& value, std::string& Error );
-		/**
-	    * @brief
-	    获得double字段值函数。
-
-	    * @param  [in] int fdIndex  字段下标\n
-	    * @param  [out] double& value  获得的字段值\n
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回获得字段值是否成功
-	    * @return  true  成功\n
-	    * @return  false  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool GetField( int fdIndex, double& value, std::string& Error );
-		/**
-	    * @brief
-	    获得MYSQL_TIME字段值函数。
-
-	    * @param  [in] int fdIndex  字段下标\n
-	    * @param  [out] MYSQL_TIME& value  获得的字段值\n
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回获得字段值是否成功
-	    * @return  true  成功\n
-	    * @return  false  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool GetField( int fdIndex, MYSQL_TIME& value, std::string& Error );
-		/**
-	    * @brief
-	    根据字段名获得字段下标函数。
-
-	    * @param  [in] const char* fdName  字段名\n
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回获得的字段下标
-	    * @return  >=0  成功\n
-	    * @return  -1  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		int GetFdIndexByName( const char* fdName, std::string& Error );
-		/**
-	    * @brief
-	    根据字段名获得int字段值函数。
-
-	    * @param  [in] const char* fdName  字段名\n
-	    * @param  [out] int& value  获得的字段值\n
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回获得字段值是否成功
-	    * @return  true  成功\n
-	    * @return  false  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool GetField( const char* fdName, int& value, std::string& Error );
-		/**
-	    * @brief
-	    根据字段名获得long long字段值函数。
-
-	    * @param  [in] const char* fdName  字段名\n
-	    * @param  [out] long long& value  获得的字段值\n
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回获得字段值是否成功
-	    * @return  true  成功\n
-	    * @return  false  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool GetField( const char* fdName, long long& value, std::string& Error );
-		/**
-	    * @brief
-	    根据字段名获得unsigned int字段值函数。
-
-	    * @param  [in] const char* fdName  字段名\n
-	    * @param  [out] unsigned int& value  获得的字段值\n
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回获得字段值是否成功
-	    * @return  true  成功\n
-	    * @return  false  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool GetField( const char* fdName, unsigned int& value, std::string& Error );
-		/**
-	    * @brief
-	    根据字段名获得string字段值函数。
-
-	    * @param  [in] const char* fdName  字段名\n
-	    * @param  [out] std::string& value  获得的字段值\n
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回获得字段值是否成功
-	    * @return  true  成功\n
-	    * @return  false  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool GetField( const char* fdName, std::string& value, std::string& Error );
-		/**
-	    * @brief
-	    根据字段名获得char*字段值函数。
-
-	    * @param  [in] const char* fdName  字段名\n
-	    * @param  [out] char* value  获得的字段值\n
-	    * @param  [in] int Length  value的长度\n
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回获得字段值是否成功
-	    * @return  true  成功\n
-	    * @return  false  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool GetField( const char* fdName, char* value, int Length, std::string& Error );
-		/**
-	    * @brief
-	    根据字段名获得bool字段值函数。
-
-	    * @param  [in] const char* fdName  字段名\n
-	    * @param  [out] bool& value  获得的字段值\n
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回获得字段值是否成功
-	    * @return  true  成功\n
-	    * @return  false  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool GetField( const char* fdName, bool& value, std::string& Error );
-		/**
-	    * @brief
-	    根据字段名获得float字段值函数。
-
-	    * @param  [in] const char* fdName  字段名\n
-	    * @param  [out] float& value  获得的字段值\n
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回获得字段值是否成功
-	    * @return  true  成功\n
-	    * @return  false  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool GetField( const char* fdName, float& value, std::string& Error );
-		/**
-	    * @brief
-	    根据字段名获得double字段值函数。
-
-	    * @param  [in] const char* fdName  字段名\n
-	    * @param  [out] double& value  获得的字段值\n
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回获得字段值是否成功
-	    * @return  true  成功\n
-	    * @return  false  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool GetField( const char* fdName, double& value, std::string& Error );
-		/**
-	    * @brief
-	    根据字段名获得MYSQL_TIME字段值函数。
-
-	    * @param  [in] const char* fdName  字段名\n
-	    * @param  [out] MYSQL_TIME& value  获得的字段值\n
-	    * @param  [out] std::string& Error  错误信息\n
-
-	    * @return 返回获得字段值是否成功
-	    * @return  true  成功\n
-	    * @return  false  失败\n
-
-	    * @note
-
-	    * @warning
-
-	    * @bug
-
-	    */
-		bool GetField( const char* fdName, MYSQL_TIME& value, std::string& Error );
-		/**
-		* @brief
-		判断字段是否为空函数。
-
-		* @param  [in] int fdIndex  字段下标\n
-		* @param  [out] std::string& Error  错误信息\n
-
-		* @return 返回字段是否为空
-		* @return  1  为空\n
-		* @return  0  不为空\n
-		* @return  -1  有错误\n
-
-		* @note
-
-		* @warning
-
-		* @bug
-
-		*/
-		int IsNull( int fdIndex, std::string& Error );
-	};
-}

+ 0 - 11
db_api/CDBSingletonDefine.h

@@ -1,11 +0,0 @@
-#pragma once
-
-//数据单实例创建
-
-#include <boost/serialization/singleton.hpp>
-#include "CDBConnPool.h"
-
-//单件相关定义
-typedef boost::serialization::singleton<YADB::CDBConnPool> singleton_CDBConnPool;
-#define sDBConnPool singleton_CDBConnPool::get_mutable_instance()
-#define sDBConnPool_const singleton_CDBConnPool::get_const_instance()

+ 0 - 309
db_api/CjasonCommon.h

@@ -1,309 +0,0 @@
-/**
-* @brief
-jason公共头文件
-
-* @version
-V 1.0.0
-
-* @author
-王益俊
-
-* @date
-创建时间:  2018-04-19\n
-
-* @note
-2018-04-19  初次创建。\n
-
-* @warning
-
-* @bug
-
-*/
-
-#ifndef CJASON_COMMON_H_
-#define CJASON_COMMON_H_
-
-#include <string>
-#include <vector>
-
-#include <rapidjson/document.h>
-#include <rapidjson/pointer.h>
-
-namespace YA
-{
-
-//----------------------------------------------------------------------------
-//                                 命令
-//----------------------------------------------------------------------------
-const char JASON_CMD_LOGIN[]              = "login";
-
-
-//----------------------------------------------------------------------------
-//                                 字段
-//----------------------------------------------------------------------------
-const char JASON_FIELD_CMD[]              = "cmd";
-
-//----------------------------------------------------------------------------
-//                                 版本
-//----------------------------------------------------------------------------
-const char JASON_CURRENT_VERSION[]        = "1.0.0.4";
-
-
-/**
- * @brief
- 通用jason包结构体
- */
-struct _JS_PACK_
-{
-public:
-	rapidjson::Document m_Doc;//jason文档对象
-public:
-    _JS_PACK_()
-	{
-
-	}
-    /**
-	* @brief
-	获得命令字函数。
-
-	* @param  [out] std::string& Error  错误信息\n
-
-	* @return 如果成功返回获得的命令字,否则返回空字符串\n
-
-	* @note
-
-	* @warning
-
-	* @bug
-
-	*/
-    std::string GetCmd( std::string& Error )
-    {
-    	rapidjson::Value::MemberIterator itMember;
-    	itMember = m_Doc.FindMember( JASON_FIELD_CMD );
-		if ( itMember == m_Doc.MemberEnd() )
-		{
-			Error = "Error,Failed to find member: ";
-			Error += JASON_FIELD_CMD;
-			return "";
-		}
-
-    	return m_Doc[JASON_FIELD_CMD].GetString();
-    }
-    /**
-	* @brief
-	获得成员函数。
-
-    * @param  [in] const std::string& MemberName  成员名称\n
-    * @param  [out] rapidjson::Value& Member  获得的成员\n
-	* @param  [out] std::string& Error  错误信息\n
-
-	* @return 如果成功返回true,否则返回false\n
-
-	* @note
-
-	* @warning
-
-	* @bug
-
-	*/
-    bool GetMember( const std::string& MemberName, rapidjson::Value& Member, std::string& Error )
-    {
-    	rapidjson::Value::MemberIterator itMember;
-    	itMember = m_Doc.FindMember( MemberName.c_str() );
-		if ( itMember == m_Doc.MemberEnd() )
-		{
-			Error = "Error,Failed to find member: ";
-			Error += MemberName;
-			return false;
-		}
-
-		rapidjson::Document::AllocatorType allocator;
-		Member.CopyFrom( itMember->value, allocator );
-
-    	return true;
-    }
-    /**
-	* @brief
-	获得指定成员的值函数。
-
-	* @param  [in] const std::string& MemberName  指定成员\n
-	* @param  [in] const std::string& ValueName  值名称\n
-	* @param  [out] rapidjson::Value& Member  获得的值\n
-	* @param  [out] std::string& Error  错误信息\n
-
-	* @return 如果成功返回true,否则返回false\n
-
-	* @note
-
-	* @warning
-
-	* @bug
-
-	*/
-    bool GetValue( const rapidjson::Value& Member, const std::string& ValueName, rapidjson::Value& Value, std::string& Error )
-    {
-    	rapidjson::Value::ConstMemberIterator itValue;
-    	itValue = Member.FindMember( ValueName.c_str() );
-    	if ( itValue == Member.MemberEnd() )
-		{
-    		char szError[256] = { 0 };
-    		sprintf( szError, "Error,Failed to find: %s", ValueName.c_str() );
-			Error = szError;
-			return false;
-		}
-
-    	rapidjson::Document::AllocatorType allocator;
-    	Value.CopyFrom( itValue->value, allocator );
-
-    	return true;
-    }
-	/**
-	 * @brief
-	 根据jason pointer获得指定的值函数。
-
-	 * @param  [in] const char* JPointer  指定的jason pointer\n
-
-	 * @return 返回获得的值\n
-
-	 * @note
-
-	 * @warning
-
-	 * @bug
-
-	 */
-    const rapidjson::Value* GetValueByJP( const char* JPointer )
-    {
-    	if ( 0 == JPointer )
-    	{
-            return 0;
-    	}
-
-    	return rapidjson::GetValueByPointer( m_Doc, rapidjson::Pointer( JPointer ) );
-    }
-	/**
-	 * @brief
-	 获得所有成员函数。
-
-	 * @param  无\n
-
-	 * @return 返回获得的所有成员的列表\n
-
-	 * @note
-
-	 * @warning
-
-	 * @bug
-
-	 */
-	std::vector<std::string> GetMembers()
-	{
-		std::vector<std::string> vMembers;
-
-		for (auto& m : m_Doc.GetObject())
-		{
-			vMembers.push_back( m.name.GetString() );
-		}
-
-		return vMembers;
-	}
-};
-
-/**
- * @brief
- 分站结构体
- */
-struct _JS_COMMON_
-{
-    std::string version;//版本
-	_JS_COMMON_()
-	{
-
-	}
-};
-
-/**
- * @brief
- 分站结构体
- */
-struct _JS_STATION_
-{
-	int stationid;//分站ID
-	_JS_STATION_()
-	{
-		stationid = 0;
-	}
-};
-
-/**
- * @brief
- 卡结构体
- */
-struct _JS_CARD_
-{
-	int cardid;//卡ID
-	int cardtype;//卡类型
-	_JS_CARD_()
-	{
-		cardid    = 0;
-		cardtype  = 0;
-	}
-};
-
-/**
- * @brief
- 呼叫结构体
- */
-struct _JS_CALL_CARD_REQ_ : public _JS_COMMON_
-{
-	int call_type_id;//呼叫类型(0 全员, 1定员)
-	int call_time_out;//呼叫时长(单位分钟)
-	int call_level_id;//呼叫级别(0一般呼叫,1紧急呼叫)
-	std::string user_name;//用户
-	long long call_time_interval;//呼叫间隔
-	std::vector<_JS_STATION_> stations;//分站列表
-	std::vector<_JS_CARD_> cards;//呼叫的卡列表
-	_JS_CALL_CARD_REQ_()
-	{
-		call_type_id       = 0;
-		call_time_out      = 0;
-		call_level_id      = 0;
-		call_time_interval = 0;
-	}
-};
-
-/**
- * @brief
- 取消呼叫结构体
- */
-struct _JS_CALL_CARD_CANCEL_REQ_ : public _JS_COMMON_
-{
-	int call_type_id;//呼叫类型(0 全员, 1定员)
-	std::string user_name;//用户
-	long long call_time;//取消时间
-	std::vector<_JS_STATION_> stations;//分站列表
-	std::vector<_JS_CARD_> cards;//呼叫的卡列表
-	_JS_CALL_CARD_CANCEL_REQ_()
-	{
-		call_type_id   = 0;
-		call_time      = 0;
-	}
-};
-
-/**
- * @brief
- 数据库连接设置结构体
- */
-struct _JS_LOGIN_
-{
-	std::string user_name;//用户名
-	std::string user_password;//密码
-	_JS_LOGIN_()
-	{
-
-	}
-};
-}
-
-#endif//CJASON_COMMON_H_

+ 0 - 489
db_api/mysqltest01.cpp

@@ -1,489 +0,0 @@
-#include <iostream>
-#include <mysql.h>
-#include <stdio.h>
-#include <mysql.h>
-#include <string>
-#include <time.h>
-#include <random>
-#include <thread>
-#include <chrono>
-#include <string.h>
-#include "CDBConnPool.h"
-#include "CDBHelper.h"
-
-void mysql_base_test()
-{
-	MYSQL conn;
-	int res = 0;
-	mysql_init(&conn);
-	if ( mysql_real_connect( &conn, "localhost", "root", "ok123", "yaxt", 0, NULL, CLIENT_FOUND_ROWS ) )
-	{
-		printf("connect success!\n");
-		res = mysql_query( &conn, "insert into test01(id,name,type,BirthDate) values(3,'user',2,'2018-1-2 12:13:14')" );
-		if ( res )
-		{
-			printf("error\n");
-        }
-	    else
-	    {
-		    printf("OK\n");
-	    }
-
-	    mysql_close(&conn);
-    }
-}
-
-void db_test_thread()
-{
-	std::cout << "db_test_thread begin:[" << std::this_thread::get_id() << "]" << std::endl;
-
-	//随机等待
-	std::default_random_engine e;
-	std::uniform_int_distribution<unsigned> u( 1, 9 );
-	int r = u( e );
-	std::this_thread::sleep_for( std::chrono::milliseconds( r * 100 ) );
-
-	std::string Error;
-	//从连接池中获得一个数据库连接
-	YADB::CDBConnect *pConn = sDBConnPool.GetDBConnect( Error );
-	if ( pConn )
-	{
-		//------------------------------------------------------
-		//操作test01表,基础功能测试
-		//------------------------------------------------------
-        //插入
-		char szInsert[1024] = { 0 };
-		//线程ID的hash值实在是没法看,所以用很蠢的办法把线程ID赋给记录ID
-		char szID[30] = { 0 };
-		sprintf( szID, "%d", std::this_thread::get_id() );
-		long long ID = atoll( szID );
-		std::string Name = "Tom.J";
-		int Type = 1;
-		std::string BirthDate = "2017-12-1 09:13:45";
-
-		my_ulonglong ullRes = 0;
-
-		//插入记录
-		sprintf( szInsert, "insert into test01(ID,Name,Type,BirthDate) values (%lld, \'%s\', %d,\'%s\')",	ID, Name.c_str(), Type, BirthDate.c_str() );
-		ullRes = pConn->ExecuteRealSql( szInsert, Error );
-		if ( YADB::DB_ERR_EXCUTE_QUERY == ullRes )
-		{
-			printf( "插入记录失败:%s!\n", Error.c_str() );
-			Error = pConn->GetLastError();
-		}
-		else
-		{
-			printf( "插入记录成功!\n" );
-		}
-
-		//查询
-		YADB::CDBResultSet *pRes = pConn->ExecuteQuery( "select * from test01", Error );
-		my_ulonglong ResCount = pRes->GetRecordCount( Error );
-		printf( "Record count = %lld\n", ResCount );
-
-		while ( pRes->GetNextRecod( Error ) )
-		{
-			long long ID = 0;
-			pRes->GetField( "ID", ID, Error );
-
-			std::string strName;
-			pRes->GetField( "Name", strName, Error );
-
-			char szName[100] = { 0 };
-			pRes->GetField( "Name", szName, sizeof( szName ), Error );
-
-			int Type = 0;
-			pRes->GetField( "Type", Type, Error );
-
-			std::string Birth;
-			pRes->GetField( "BirthDate", Birth, Error );
-
-			MYSQL_TIME dtBirth;
-			pRes->GetField( "BirthDate", dtBirth, Error );
-
-			printf( "ID=%lld Name=%s Type=%d BirthDate=%s\n", ID, strName.c_str(), Type, Birth.c_str() );
-		}
-
-		//修改
-		memset( szInsert , 0, sizeof( szInsert ) );
-		Name = "李明";
-		BirthDate = "2018-1-1 01:01:01";
-
-		sprintf( szInsert, "update test01 set Name='%s\',BirthDate ='%s\' where ID=%lld", Name.c_str(), BirthDate.c_str(), ID );
-		ullRes = pConn->ExecuteRealSql( szInsert, Error );
-		if ( YADB::DB_ERR_EXCUTE_QUERY == ullRes )
-		{
-			printf( "更新记录失败:%s!\n", Error.c_str() );
-		}
-		else
-		{
-			printf( "更新记录成功!\n" );
-		}
-
-		//删除
-		memset( szInsert, 0, sizeof( szInsert ) );
-		sprintf( szInsert, "delete from test01 where ID=%lld", ID );
-		ullRes = pConn->ExecuteSql( szInsert, Error );
-		if ( YADB::DB_ERR_EXCUTE_QUERY == ullRes )
-		{
-			printf( "删除记录失败:%s!\n", Error.c_str() );
-		}
-		else
-		{
-			printf( "删除记录成功!\n" );
-		}
-
-		//用预处理方式出入记录
-		long long LID = 100000000 + ID;
-		char name[20] = "Jarry";
-		long nameLen = strlen( name );
-		int type = 2;
-		MYSQL_TIME ts;
-		ts.year = 2018;
-		ts.month = 1;
-		ts.day = 13;
-		ts.hour = 13;
-		ts.minute = 15;
-		ts.second = 16;
-		ts.second_part = 0;
-		ts.time_type = MYSQL_TIMESTAMP_DATE;
-
-		MYSQL_BIND bindData[4];
-		memset( bindData, 0, sizeof( bindData ) );
-
-		bindData[0].buffer_type = MYSQL_TYPE_LONGLONG;
-		bindData[0].buffer = ( long long * ) &LID;
-		bindData[0].is_null = 0;
-
-		bindData[1].buffer_type = MYSQL_TYPE_STRING;
-		bindData[1].buffer = ( char * ) name;
-		bindData[1].buffer_length = nameLen;
-		bindData[1].is_null = 0;
-		bindData[1].length = ( unsigned long* ) &nameLen;
-
-		bindData[2].buffer_type = MYSQL_TYPE_LONG;
-		bindData[2].buffer = &type;
-		bindData[2].is_null = 0;
-
-		bindData[3].buffer_type = MYSQL_TYPE_DATETIME;
-		bindData[3].buffer = ( char * ) &ts;
-		bindData[3].is_null = 0;
-		bindData[3].length = 0;
-
-		if ( !pConn->stmtExcute( bindData, 0, Error ) )
-		{
-			printf( "执行预处理失败:%s!\n", Error.c_str() );
-		}
-		else
-		{
-			printf( "执行预处理成功!\n" );
-
-			//删除
-			memset( szInsert, 0, sizeof( szInsert ) );
-			sprintf( szInsert, "delete from test01 where ID=%lld", LID );
-			ullRes = pConn->ExecuteSql( szInsert, Error );
-			if ( YADB::DB_ERR_EXCUTE_QUERY == ullRes )
-			{
-				printf( "删除记录失败:%s!\n", Error.c_str() );
-			}
-			else
-			{
-				printf( "删除记录成功!\n" );
-			}
-		}
-
-		//------------------------------------------------------
-		//操作test02表,test02表的ID字段是自增的
-		//------------------------------------------------------
-		//插入记录
-		sprintf( szInsert, "insert into test02(Name,Type,BirthDate) values (\'%s\', %d,\'%s\')",	Name.c_str(), Type, BirthDate.c_str() );
-		ullRes = pConn->ExecuteRealSql( szInsert, Error );
-		if ( YADB::DB_ERR_EXCUTE_QUERY == ullRes )
-		{
-			printf( "插入记录失败:%s!\n", Error.c_str() );
-			Error = pConn->GetLastError();
-		}
-		else
-		{
-			printf( "插入记录成功!\n" );
-		}
-
-		my_ulonglong InsertedID = pConn->GetLastInsertID( Error );
-		printf( "新插入ID:%lld!\n", InsertedID );
-
-		//删除
-		memset( szInsert, 0, sizeof( szInsert ) );
-		sprintf( szInsert, "delete from test02 where ID=%lld", InsertedID );
-		ullRes = pConn->ExecuteSql( szInsert, Error );
-		if ( YADB::DB_ERR_EXCUTE_QUERY == ullRes )
-		{
-			printf( "删除记录失败:%s!\n", Error.c_str() );
-		}
-		else
-		{
-			printf( "删除记录成功!\n" );
-		}
-
-		//------------------------------------------------------
-		//操作test01表,事务测试
-		//------------------------------------------------------
-		pConn->AutoCommit( false, Error );//把自动提交设置成false
-		Name = "GuaGua";
-		LID = 900000000 + ID;
-		sprintf( szInsert, "insert into test01(ID,Name,Type,BirthDate) values (%lld, \'%s\', %d,\'%s\')",	LID, Name.c_str(), Type, BirthDate.c_str() );
-		ullRes = pConn->ExecuteRealSql( szInsert, Error );
-		if ( YADB::DB_ERR_EXCUTE_QUERY == ullRes )
-		{
-			printf( "插入记录失败:%s!\n", Error.c_str() );
-			Error = pConn->GetLastError();
-		}
-		else
-		{
-			printf( "插入记录成功!\n" );
-		}
-		//pConn->Commit( Error );//提交
-		pConn->RollBack( Error );//回滚
-		pConn->AutoCommit( true, Error );//把自动提交设置成true
-
-		//归还数据库连接
-		sDBConnPool.GiveBack( pConn );
-
-		//异步执行测试
-		printf( "异步执行测试开始!\n" );
-		char szSQL[1024] = { 0 };
-		//memset( szSQL, 0, sizeof( szSQL ) );
-		sprintf( szSQL, "insert into test01(ID,Name,Type,BirthDate) values (%lld, \'%s\', %d,\'%s\')",	LID, "Mike", 3, "2000-1-1 12:13:14" );
-		sDBConnPool.PushAsync( szSQL );
-
-		memset( szSQL, 0, sizeof( szSQL ) );
-		sprintf( szSQL, "delete from test01 where ID=%lld",	LID );
-		sDBConnPool.PushAsync( szSQL );
-		printf( "异步执行测试结束!\n" );
-	}
-
-	//显示线程信息
-	std::cout << "[" << std::this_thread::get_id() << "]" << " db_test_thread end!\n" ;
-}
-
-//在多线程环境下测试
-void thread_db_class_test()
-{
-	printf( "----------------------------------------------------------------\n" );
-	printf( "                           多线程测试                             \n" );
-	printf( "----------------------------------------------------------------\n" );
-
-	YADB::_DB_POOL_SETTING_ DBSetting;
-	DBSetting.Host     = "localhost";
-	DBSetting.User     = "root";
-	DBSetting.PWD      = "ok123";
-	DBSetting.DBName   = "yaxt";
-	//DBSetting.CharSet  = "GB2312";
-	DBSetting.CharSet  = "utf8";
-	DBSetting.TimeOut  = 5;
-	DBSetting.PoolSize = 10;
-	DBSetting.stmtSQL  = "insert into test01(ID,Name,Type,BirthDate) values (?,?,?,?)";
-
-	std::string Error;
-
-	//创建连接池
-	if ( !sDBConnPool.Create( DBSetting, Error ) )
-	{
-		printf( "线程池创建失败,Err=%s\n", Error.c_str() );
-		return;
-	}
-
-	//多线程测试
-	int ThreadCount = 1;//线程数
-	for ( int i = 0; i < ThreadCount; i++ )
-	{
-		std::thread t( db_test_thread );
-		t.detach();
-	}
-
-	sDBConnPool.Close();
-}
-
-void simple_db_class_test()
-{
-	printf("----------------------------------------------------------------\n");
-	printf("                           简单测试                              \n");
-	printf("----------------------------------------------------------------\n");
-
-	YADB::_DB_POOL_SETTING_ DBSetting;
-	DBSetting.Host = "localhost";
-	DBSetting.User = "root";
-	DBSetting.PWD = "ok123";
-	DBSetting.DBName = "yaxt";
-	DBSetting.CharSet = "utf8";
-	DBSetting.TimeOut = 5;
-	DBSetting.PoolSize = 10;
-	DBSetting.stmtSQL =	"insert into test01(ID,Name,Type,BirthDate) values (?,?,?,?)";
-
-	std::string Error;
-
-	//创建连接池
-	if ( !sDBConnPool.Create( DBSetting, Error ) )
-	{
-		printf("线程池创建失败,Err=%s\n", Error.c_str());
-		return;
-	}
-
-	YADB::CDBHelper DBHelper;
-	YADB::CDBResultSet DBRes;
-	sDBConnPool.Query( "select * from test01", DBRes, Error );
-	int nCount = DBRes.GetRecordCount( Error );
-	if (nCount > 0)
-	{
-		printf( "The record count=%d\n", nCount );
-
-		while ( DBRes.GetNextRecod(Error) )
-		{
-			long long ID = 0;
-			DBRes.GetField( "ID", ID, Error );
-
-			char szName[100] = { 0 };
-			DBRes.GetField( "Name", szName, sizeof( szName ), Error );
-
-			std::string strName;
-			DBRes.GetField( "Name", strName, Error );
-
-			int Type = 0;
-			DBRes.GetField( "Type", Type, Error );
-
-			unsigned int uType = 0;
-			DBRes.GetField( "Type", uType, Error );
-
-			std::string Birth;
-			DBRes.GetField( "BirthDate", Birth, Error );
-
-			float fValue = 0.0;
-			DBRes.GetField( "FloatField", fValue, Error );
-
-			double dValue = 0.0;
-			DBRes.GetField( "DoubleField", dValue, Error );
-
-			bool bValue = false;
-			DBRes.GetField( "BoolField", bValue, Error );
-
-			MYSQL_TIME dtBirth;
-			DBRes.GetField( "DateTimeField", dtBirth, Error );
-			char szBirth[40] = { 0 };
-			DBHelper.DateTime2String( dtBirth, szBirth, sizeof( szBirth ) );
-
-			std::cout << "ID=" << ID << " ";
-			std::cout << "Name=" << szName << " ";
-			std::cout << "Name=" << strName.c_str() << " ";
-			std::cout << "Type=" << Type << " ";
-			std::cout << "Type=" << uType << " ";
-			std::cout << "BirthDate=" << Birth << " ";
-			std::cout << "FloatField=" << fValue << " ";
-			std::cout << "DoubleField=" << dValue << " ";
-			std::cout << "BoolField=" << bValue << " ";
-			std::cout << "DateTimeField=" << szBirth << " ";
-			std::cout << std::endl;
-		}
-	}
-
-	std::string strUptSQL;
-	strUptSQL = "update test01 set DoubleField=1.888888 where ID=1";
-	if ( sDBConnPool.ExecuteSql( strUptSQL.c_str(), Error ) < 0 )
-	{
-		printf( "Err,Failed to ExecuteSql:%s,Err=%s\n", strUptSQL.c_str(), Error.c_str() );
-	}
-}
-
-void stmt_test()
-{
-	printf("----------------------------------------------------------------\n");
-	printf("                          预处理测试                              \n");
-	printf("----------------------------------------------------------------\n");
-
-	YADB::_DB_POOL_SETTING_ DBSetting;
-	DBSetting.Host     = "localhost";
-	DBSetting.User     = "root";
-	DBSetting.PWD      = "ok123";
-	DBSetting.DBName   = "yaxt";
-	DBSetting.CharSet  = "utf8";
-	DBSetting.TimeOut  = 5;
-	DBSetting.PoolSize = 10;
-
-	std::string Error;
-
-	//创建连接池
-	if ( !sDBConnPool.Create( DBSetting, Error ) )
-	{
-		printf( "线程池创建失败,Err=%s\n", Error.c_str() );
-		return;
-	}
-
-	YADB::CDBConnect *pConn = sDBConnPool.GetDBConnect( Error );
-
-	//delete old record
-	pConn->ExecuteSql( "delete from test01 where ID >=10000", Error );
-
-	//insert new record bystmt
-	if ( !pConn->Preparestmt( "insert into test01(ID,Name,Type,BirthDate) values (?,?,?,?)", Error ) )
-	{
-		printf("Invoke Preparestmt失败,Err=%s\n", Error.c_str());
-		return;
-	}
-
-	for ( int i = 10000; i <= 10010000; i++ )
-	{
-		long long LID = i;
-		char name[20] = "Jarry";
-		long nameLen = strlen(name);
-		int type = 2;
-		MYSQL_TIME ts;
-		ts.year = 2018;
-		ts.month = 1;
-		ts.day = 13;
-		ts.hour = 13;
-		ts.minute = 15;
-		ts.second = 16;
-		ts.second_part = 0;
-		ts.time_type = MYSQL_TIMESTAMP_DATE;
-
-		MYSQL_BIND bindData[4];
-		memset(bindData, 0, sizeof(bindData));
-
-		bindData[0].buffer_type = MYSQL_TYPE_LONGLONG;
-		bindData[0].buffer = (long long *) &LID;
-		bindData[0].is_null = 0;
-
-		bindData[1].buffer_type = MYSQL_TYPE_STRING;
-		bindData[1].buffer = (char *) name;
-		bindData[1].buffer_length = nameLen;
-		bindData[1].is_null = 0;
-		bindData[1].length = (unsigned long*) &nameLen;
-
-		bindData[2].buffer_type = MYSQL_TYPE_LONG;
-		bindData[2].buffer = &type;
-		bindData[2].is_null = 0;
-
-		bindData[3].buffer_type = MYSQL_TYPE_DATETIME;
-		bindData[3].buffer = (char *) &ts;
-		bindData[3].is_null = 0;
-		bindData[3].length = 0;
-
-		if ( !pConn->stmtExcute( bindData, 0, Error ) )
-		{
-			printf("执行预处理失败:%s!\n", Error.c_str());
-		}
-	}
-	printf("预处理完成!\n");
-}
-
-int main()
-{
-	//mysql_base_test();
-	simple_db_class_test();
-	//thread_db_class_test();
-	//stmt_test();
-
-	printf( "Press Enter key to continue...\n" );
-	fgetc( stdin );
-
-	printf( "All Done!\n" );
-	return 0;
-}

+ 3 - 3
main.cpp

@@ -91,12 +91,12 @@ struct Init_Setting
 	}
     void _mysql_init(YADB::_DB_POOL_SETTING_ &dps)
     {
-        std::string Error;
+        std::string szError = "";
 		//std::this_thread::sleep_for(std::chrono::seconds(2));
         //创建连接池
-        if ( !sDBConnPool.Create( dps, Error ) )
+        if ( !sDBConnPool.Create( dps, szError ) )
         {
-            log_error("数据库线程池创建失败,Err=%s\n", Error.c_str());
+            log_error("数据库线程池创建失败,Err=%s\n", szError.c_str());
         }
     }