CDBResultSet.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573
  1. /**
  2. * @brief
  3. 数据库结果集类
  4. * @version
  5. V 1.0.0
  6. * @author
  7. 王益俊
  8. * @date
  9. 创建时间: 2018-04-18\n
  10. * @note
  11. 2018-04-18 创建类。\n
  12. * @warning
  13. * @bug
  14. */
  15. #pragma once
  16. #include <string>
  17. #include <map>
  18. #include <mysql.h>
  19. #include "CDBCommon.h"
  20. #include "CDBHelper.h"
  21. namespace YADB
  22. {
  23. class CDBResultSet
  24. {
  25. friend class CDBConnect;
  26. private:
  27. MYSQL_RES* __pQueryRes;//结果集
  28. MYSQL_ROW __CurRow;//当前记录行
  29. int __FieldCount;//字段的个数
  30. CDBHelper __DBHelper;//助手
  31. std::map<std::string,int> __FNameIndexList;//字段名和字段下标对应列表(key是字段名,value是字段下标)
  32. private:
  33. /**
  34. * @brief
  35. 构建字段名字段下标对应列表函数。
  36. * @note
  37. * @warning
  38. * @bug
  39. */
  40. void __BuildFNameIdxLst();
  41. /**
  42. * @brief
  43. 获得原始字符串值函数。
  44. * @param [in] int fdIndex 字段下标\n
  45. * @param [out] char* szValue 获得的原始字符串值\n
  46. * @param [out] bool& IsNull 是否为空\n
  47. * @param [out] std::string& Error 错误信息\n
  48. * @return 返回获得字段值是否成功
  49. * @return true 成功\n
  50. * @return false 失败\n
  51. * @note
  52. * @warning
  53. * @bug
  54. */
  55. bool __GetField( int fdIndex, char*& szValue, bool& IsNull, std::string& Error );
  56. public:
  57. CDBResultSet();
  58. ~CDBResultSet();
  59. /**
  60. * @brief
  61. 绑定到一个MYSQL结果集函数。
  62. * @param [in] MYSQL_RES *pQueryRes MYSQL结果集\n
  63. * @param [out] std::string& Error 错误信息\n
  64. * @return 返回绑定到一个MYSQL结果集是否成功
  65. * @return true 成功\n
  66. * @return false 失败\n
  67. * @note
  68. * @warning
  69. * @bug
  70. */
  71. bool Bind( MYSQL_RES *pQueryRes, std::string& Error );
  72. /**
  73. * @brief
  74. 关闭函数。
  75. * @param 无\n
  76. * @return 无\n
  77. * @note
  78. * @warning
  79. * @bug
  80. */
  81. void Close();
  82. /**
  83. * @brief
  84. 查找数据函数。
  85. * @param [in] my_ulonglong Offset 偏移量\n
  86. * @param [out] std::string& Error 错误信息\n
  87. * @return 返回查找数据是否成功
  88. * @return true 成功\n
  89. * @return false 失败\n
  90. * @note
  91. * @warning
  92. * @bug
  93. */
  94. bool SeekData( my_ulonglong Offset, std::string& Error );
  95. /**
  96. * @brief
  97. 获得下一条记录函数。
  98. * @param [out] std::string& Error 错误信息\n
  99. * @return 返回获得下一条记录是否成功
  100. * @return true 成功\n
  101. * @return false 失败\n
  102. * @note
  103. * @warning
  104. * @bug
  105. */
  106. bool GetNextRecod( std::string& Error );
  107. /**
  108. * @brief
  109. 获得记录数函数。
  110. * @param [out] std::string& Error 错误信息\n
  111. * @return 返回获得的记录数
  112. * @return >=0 成功\n
  113. * @return -1 失败\n
  114. * @note
  115. * @warning
  116. * @bug
  117. */
  118. my_ulonglong GetRecordCount( std::string& Error );
  119. /**
  120. * @brief
  121. 获得int字段值函数。
  122. * @param [in] int fdIndex 字段下标\n
  123. * @param [out] int& value 获得的int字段值\n
  124. * @param [out] std::string& Error 错误信息\n
  125. * @return 返回获得字段值是否成功
  126. * @return true 成功\n
  127. * @return false 失败\n
  128. * @note
  129. * @warning
  130. * @bug
  131. */
  132. bool GetField( int fdIndex, int& value, std::string& Error );
  133. /**
  134. * @brief
  135. 获得unsigned int字段值函数。
  136. * @param [in] int fdIndex 字段下标\n
  137. * @param [out] unsigned int& value 获得的字段值\n
  138. * @param [out] std::string& Error 错误信息\n
  139. * @return 返回获得字段值是否成功
  140. * @return true 成功\n
  141. * @return false 失败\n
  142. * @note
  143. * @warning
  144. * @bug
  145. */
  146. bool GetField( int fdIndex, unsigned int& value, std::string& Error );
  147. /**
  148. * @brief
  149. 获得long long字段值函数。
  150. * @param [in] int fdIndex 字段下标\n
  151. * @param [out] long long& value 获得的字段值\n
  152. * @param [out] std::string& Error 错误信息\n
  153. * @return 返回获得字段值是否成功
  154. * @return true 成功\n
  155. * @return false 失败\n
  156. * @note
  157. * @warning
  158. * @bug
  159. */
  160. bool GetField( int fdIndex, long long& value, std::string& Error );
  161. /**
  162. * @brief
  163. 获得std::string字段值函数。
  164. * @param [in] int fdIndex 字段下标\n
  165. * @param [out] std::string& value 获得的字段值\n
  166. * @param [out] std::string& Error 错误信息\n
  167. * @return 返回获得字段值是否成功
  168. * @return true 成功\n
  169. * @return false 失败\n
  170. * @note
  171. * @warning
  172. * @bug
  173. */
  174. bool GetField( int fdIndex, std::string& value, std::string& Error );
  175. /**
  176. * @brief
  177. 获得char*字段值函数。
  178. * @param [in] int fdIndex 字段下标\n
  179. * @param [out] char* value 获得的字段值\n
  180. * @param [in] int Length value的最大长度\n
  181. * @param [out] std::string& Error 错误信息\n
  182. * @return 返回获得字段值是否成功
  183. * @return true 成功\n
  184. * @return false 失败\n
  185. * @note
  186. * @warning
  187. * @bug
  188. */
  189. bool GetField( int fdIndex, char* value, int Length, std::string& Error );
  190. /**
  191. * @brief
  192. 获得bool字段值函数。
  193. * @param [in] int fdIndex 字段下标\n
  194. * @param [out] bool& value 获得的字段值\n
  195. * @param [out] std::string& Error 错误信息\n
  196. * @return 返回获得字段值是否成功
  197. * @return true 成功\n
  198. * @return false 失败\n
  199. * @note
  200. * @warning
  201. * @bug
  202. */
  203. bool GetField( int fdIndex, bool& value, std::string& Error );
  204. /**
  205. * @brief
  206. 获得float字段值函数。
  207. * @param [in] int fdIndex 字段下标\n
  208. * @param [out] float& value 获得的字段值\n
  209. * @param [out] std::string& Error 错误信息\n
  210. * @return 返回获得字段值是否成功
  211. * @return true 成功\n
  212. * @return false 失败\n
  213. * @note
  214. * @warning
  215. * @bug
  216. */
  217. bool GetField( int fdIndex, float& value, std::string& Error );
  218. /**
  219. * @brief
  220. 获得double字段值函数。
  221. * @param [in] int fdIndex 字段下标\n
  222. * @param [out] double& value 获得的字段值\n
  223. * @param [out] std::string& Error 错误信息\n
  224. * @return 返回获得字段值是否成功
  225. * @return true 成功\n
  226. * @return false 失败\n
  227. * @note
  228. * @warning
  229. * @bug
  230. */
  231. bool GetField( int fdIndex, double& value, std::string& Error );
  232. /**
  233. * @brief
  234. 获得MYSQL_TIME字段值函数。
  235. * @param [in] int fdIndex 字段下标\n
  236. * @param [out] MYSQL_TIME& value 获得的字段值\n
  237. * @param [out] std::string& Error 错误信息\n
  238. * @return 返回获得字段值是否成功
  239. * @return true 成功\n
  240. * @return false 失败\n
  241. * @note
  242. * @warning
  243. * @bug
  244. */
  245. bool GetField( int fdIndex, MYSQL_TIME& value, std::string& Error );
  246. /**
  247. * @brief
  248. 根据字段名获得字段下标函数。
  249. * @param [in] const char* fdName 字段名\n
  250. * @param [out] std::string& Error 错误信息\n
  251. * @return 返回获得的字段下标
  252. * @return >=0 成功\n
  253. * @return -1 失败\n
  254. * @note
  255. * @warning
  256. * @bug
  257. */
  258. int GetFdIndexByName( const char* fdName, std::string& Error );
  259. /**
  260. * @brief
  261. 根据字段名获得int字段值函数。
  262. * @param [in] const char* fdName 字段名\n
  263. * @param [out] int& value 获得的字段值\n
  264. * @param [out] std::string& Error 错误信息\n
  265. * @return 返回获得字段值是否成功
  266. * @return true 成功\n
  267. * @return false 失败\n
  268. * @note
  269. * @warning
  270. * @bug
  271. */
  272. bool GetField( const char* fdName, int& value, std::string& Error );
  273. /**
  274. * @brief
  275. 根据字段名获得long long字段值函数。
  276. * @param [in] const char* fdName 字段名\n
  277. * @param [out] long long& value 获得的字段值\n
  278. * @param [out] std::string& Error 错误信息\n
  279. * @return 返回获得字段值是否成功
  280. * @return true 成功\n
  281. * @return false 失败\n
  282. * @note
  283. * @warning
  284. * @bug
  285. */
  286. bool GetField( const char* fdName, long long& value, std::string& Error );
  287. /**
  288. * @brief
  289. 根据字段名获得unsigned int字段值函数。
  290. * @param [in] const char* fdName 字段名\n
  291. * @param [out] unsigned int& value 获得的字段值\n
  292. * @param [out] std::string& Error 错误信息\n
  293. * @return 返回获得字段值是否成功
  294. * @return true 成功\n
  295. * @return false 失败\n
  296. * @note
  297. * @warning
  298. * @bug
  299. */
  300. bool GetField( const char* fdName, unsigned int& value, std::string& Error );
  301. /**
  302. * @brief
  303. 根据字段名获得string字段值函数。
  304. * @param [in] const char* fdName 字段名\n
  305. * @param [out] std::string& value 获得的字段值\n
  306. * @param [out] std::string& Error 错误信息\n
  307. * @return 返回获得字段值是否成功
  308. * @return true 成功\n
  309. * @return false 失败\n
  310. * @note
  311. * @warning
  312. * @bug
  313. */
  314. bool GetField( const char* fdName, std::string& value, std::string& Error );
  315. /**
  316. * @brief
  317. 根据字段名获得char*字段值函数。
  318. * @param [in] const char* fdName 字段名\n
  319. * @param [out] char* value 获得的字段值\n
  320. * @param [in] int Length value的长度\n
  321. * @param [out] std::string& Error 错误信息\n
  322. * @return 返回获得字段值是否成功
  323. * @return true 成功\n
  324. * @return false 失败\n
  325. * @note
  326. * @warning
  327. * @bug
  328. */
  329. bool GetField( const char* fdName, char* value, int Length, std::string& Error );
  330. /**
  331. * @brief
  332. 根据字段名获得bool字段值函数。
  333. * @param [in] const char* fdName 字段名\n
  334. * @param [out] bool& value 获得的字段值\n
  335. * @param [out] std::string& Error 错误信息\n
  336. * @return 返回获得字段值是否成功
  337. * @return true 成功\n
  338. * @return false 失败\n
  339. * @note
  340. * @warning
  341. * @bug
  342. */
  343. bool GetField( const char* fdName, bool& value, std::string& Error );
  344. /**
  345. * @brief
  346. 根据字段名获得float字段值函数。
  347. * @param [in] const char* fdName 字段名\n
  348. * @param [out] float& value 获得的字段值\n
  349. * @param [out] std::string& Error 错误信息\n
  350. * @return 返回获得字段值是否成功
  351. * @return true 成功\n
  352. * @return false 失败\n
  353. * @note
  354. * @warning
  355. * @bug
  356. */
  357. bool GetField( const char* fdName, float& value, std::string& Error );
  358. /**
  359. * @brief
  360. 根据字段名获得double字段值函数。
  361. * @param [in] const char* fdName 字段名\n
  362. * @param [out] double& value 获得的字段值\n
  363. * @param [out] std::string& Error 错误信息\n
  364. * @return 返回获得字段值是否成功
  365. * @return true 成功\n
  366. * @return false 失败\n
  367. * @note
  368. * @warning
  369. * @bug
  370. */
  371. bool GetField( const char* fdName, double& value, std::string& Error );
  372. /**
  373. * @brief
  374. 根据字段名获得MYSQL_TIME字段值函数。
  375. * @param [in] const char* fdName 字段名\n
  376. * @param [out] MYSQL_TIME& value 获得的字段值\n
  377. * @param [out] std::string& Error 错误信息\n
  378. * @return 返回获得字段值是否成功
  379. * @return true 成功\n
  380. * @return false 失败\n
  381. * @note
  382. * @warning
  383. * @bug
  384. */
  385. bool GetField( const char* fdName, MYSQL_TIME& value, std::string& Error );
  386. /**
  387. * @brief
  388. 判断字段是否为空函数。
  389. * @param [in] int fdIndex 字段下标\n
  390. * @param [out] std::string& Error 错误信息\n
  391. * @return 返回字段是否为空
  392. * @return 1 为空\n
  393. * @return 0 不为空\n
  394. * @return -1 有错误\n
  395. * @note
  396. * @warning
  397. * @bug
  398. */
  399. int IsNull( int fdIndex, std::string& Error );
  400. };
  401. }