/** * @brief 数据库结果集类 * @version V 1.0.0 * @author * @date 创建时间: 2018-04-18\n * @note 2018-04-18 创建类。\n * @warning * @bug */ #pragma once #include #include #include #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 __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 ); }; }