国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

數據庫MySql類庫系列(四)-QueryOperatorSelect

2019-11-06 06:32:08
字體:
來源:轉載
供稿:網友

第四個工具類,QueryOperatorSelect

負責處理:直接執行sql方式下的,查找,以及獲取查找結果的需求。

用到了之前的DBOperator,主要是封裝其ExecQuery接口。

另外提供獲取查詢結果的相應接口:

從結果集中取出一行數據:FetchResult。

取出一行數據之后,在這一行數據中,取每個字段的值:GetColumn。(由于本人的業務需要,目前僅提供支持7種數據類型:int,unsigned int,long long,unsigned long long,float,字符串,Blob)。

每一行數據都處理完之后,釋放結果集:FreeResult。(如果不釋放,在下次執行查詢之前,會強制釋放,對象析構時,會強制釋放)。

QueryOperatorSelect.h

#ifndef __QueryOperatorSelect_H__#define	__QueryOperatorSelect_H__struct st_MySQL;typedef struct st_mysql MYSQL;struct st_mysql_res;typedef struct st_mysql_res MYSQL_RES;typedef char** MYSQL_ROW;namespace common{	namespace db{		class QueryOperatorSelect		{		public:			QueryOperatorSelect();			~QueryOperatorSelect();			void Release();			// 執行sql			bool DoOperator(MYSQL *connect, const char *sql);			// 獲取一條結果			bool FetchResult();						// 獲取一條結果一列的值			bool GetColumn(int& value, unsigned int index);			bool GetColumn(unsigned int& value, unsigned int index);			bool GetColumn(long long& value, unsigned int index);			bool GetColumn(unsigned long long& value, unsigned int index);			bool GetColumn(float& value, unsigned int index);			bool GetColumn(void* value, unsigned int index);			// 釋放結果			bool FreeResult();		PRivate:			MYSQL_RES *m_Data;				// 結果集數據			unsigned int m_FieldCount;		// 結果集列數			MYSQL_ROW m_Columns;			// 數據每一列的值			unsigned long *m_ColumnLens;	// 數據每一列的長度		};	}}#endifQueryOperatorSelect.cpp

#include "QueryOperatorSelect.h"#ifdef WIN32#include <winsock2.h>#endif#include <stdio.h>#include <mysql.h>#include <string.h>#include <stdarg.h>#include "DBOperator.h"namespace common{	namespace db{		QueryOperatorSelect::QueryOperatorSelect()		{			m_Data = NULL;			m_FieldCount = 0;			m_Columns = NULL;			m_ColumnLens = NULL;		}		QueryOperatorSelect::~QueryOperatorSelect()		{			Release();		}		void QueryOperatorSelect::Release()		{			if (NULL != m_Data)			{				DBOperator::FreeResult(m_Data);				m_Data = NULL;			}			if (NULL != m_Columns)			{				m_Columns = NULL;			}		}		bool QueryOperatorSelect::DoOperator(MYSQL *connect, const char *sql)		{			if (NULL != connect && NULL != sql)			{				if (NULL != m_Data)				{					DBOperator::FreeResult(m_Data);					m_Data = NULL;				}				if (DBOperator::ExecQuery(connect, sql))				{					m_Data = DBOperator::SelectResult(connect);					if (NULL != m_Data)					{						m_FieldCount = DBOperator::GetResultFields(m_Data);						return true;					}					else					{						m_FieldCount = 0;						return false;					}				}				else				{					return false;				}			}			else			{				return false;			}		}		bool QueryOperatorSelect::FetchResult()		{			if (NULL != m_Data)			{				m_Columns = DBOperator::GetNextResult(m_Data);				m_ColumnLens = DBOperator::GetResultLens(m_Data);				if (NULL != m_Columns && NULL != m_ColumnLens)				{					return true;				}				else				{					DBOperator::FreeResult(m_Data);					m_Data = NULL;					m_ColumnLens = NULL;					return false;				}			}			else			{				return false;			}		}		bool QueryOperatorSelect::GetColumn(int& value, unsigned int index)		{			if (NULL != m_Columns && index < m_FieldCount)			{				sscanf(m_Columns[index], "%d", &value);				return true;			}			else			{				return false;			}		}		bool QueryOperatorSelect::GetColumn(unsigned int& value, unsigned int index)		{			if (NULL != m_Columns && index < m_FieldCount)			{				sscanf(m_Columns[index], "%u", &value);				return true;			}			else			{				return false;			}		}		bool QueryOperatorSelect::GetColumn(long long& value, unsigned int index)		{			if (NULL != m_Columns && index < m_FieldCount)			{				sscanf(m_Columns[index], "%lld", &value);				return true;			}			else			{				return false;			}		}		bool QueryOperatorSelect::GetColumn(unsigned long long& value, unsigned int index)		{			if (NULL != m_Columns && index < m_FieldCount)			{				sscanf(m_Columns[index], "%llu", &value);				return true;			}			else			{				return false;			}		}		bool QueryOperatorSelect::GetColumn(float& value, unsigned int index)		{			if (NULL != m_Columns && index < m_FieldCount)			{				sscanf(m_Columns[index], "%f", &value);				return true;			}			else			{				return false;			}		}		bool QueryOperatorSelect::GetColumn(void* value, unsigned int index)		{			if (NULL != m_Columns && NULL != m_ColumnLens && index < m_FieldCount)			{				memcpy(value, m_Columns[index], m_ColumnLens[index]);				return true;			}			else			{				return false;			}		}		bool QueryOperatorSelect::FreeResult()		{			if (NULL != m_Data)			{				DBOperator::FreeResult(m_Data);				m_Data = NULL;				return true;			}			else			{				return false;			}		}	}}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宣威市| 谢通门县| 会东县| 新安县| 连山| 长顺县| 巨鹿县| 布尔津县| 望江县| 灌阳县| 崇明县| 福贡县| 嵊泗县| 固阳县| 女性| 固阳县| 溧阳市| 麻城市| 青川县| 平塘县| 安乡县| 镇沅| 东辽县| 扎鲁特旗| 陵川县| 泰顺县| 威宁| 旬邑县| 永顺县| 滦南县| 兴义市| 静海县| 邹平县| 安陆市| 崇明县| 湄潭县| 晋中市| 华安县| 伊川县| 郸城县| 三穗县|