数据库MySql类库系列(四)-QueryOperatorSelect
来源:互联网 发布:地图制图软件 编辑:程序博客网 时间:2024/05/20 04:51
第四个工具类,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();// 执行sqlbool 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;// 数据每一列的长度};}}#endif
QueryOperatorSelect.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;}}}}
0 0
- 数据库MySql类库系列(四)-QueryOperatorSelect
- 数据库MySql类库系列(一)-DBOperator
- 数据库MySql类库系列(三)-QueryOperatorUpdate
- 数据库MySql类库系列(二)-DBService
- 数据库MySql类库系列(六)-PrepareOperatorUpdate
- 数据库MySql类库系列(七)-PrepareOperatorSelect
- 数据库MySql类库系列(九)-DBServicePool
- **MYSQL** 系列四
- MySQL 操作数据库(四)
- 数据库-mysql(四)
- **YII** 系列四数据库访问
- redis系列(四)数据库
- mysql系列:数据库优化
- MySql 系列数据库详解
- Mysql 体系结构系列之四
- MySQL系列教程(四)
- Mysql数据库优化系列(四)------表的优化与列类型选择
- MySQL---数据库从入门走向大神系列(四)-子查询、表与表之间的关系
- 注重数学检验分析,高效完成产品上线测试
- OkHttp中 response.body().string()只能调用一次分析~~~
- 测试数据库优化1
- pat L3-010是否完全二叉搜索树(静态建树 层次遍历)@
- 单链表的基本操作
- 数据库MySql类库系列(四)-QueryOperatorSelect
- Python基础练习——字符串和字典的转换
- 137. Single Number II(C++)
- python抓取历年特码开奖记录
- 前端练习
- Memcache Redis MongoDB数据缓存系统方案对比与分析
- 生产者消费者问题(java)
- LIS常用数据交换协议
- CUDA学习日记6