CDBResultSet.h 12 KB

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