当前位置:   article > 正文

C++ MySQL编程

mysql c++ 参考手册 csdn

MySQL编程需要包含<mysql.h>头文件。该文件一般在MySQL安装目录下的include文件夹下。

包含头文件还不够,还需要包含“libmysql.lib”库,一般在lib文件夹下。

MySQL编程与Socket编程非常相似,唯一不同的是MySQL使用的是MYSQL结构体,而Socket使用的是SOCKET。因此需要先构建一个MYSQL结构体并初始化(mysql_init),使用完后需要释放该结构体(mysql_close)。

函数详情可查看MYSQL参考手册

下载地址:链接:https://pan.baidu.com/s/1qZ96XtU 密码:zk5l

// MySQL.h

  1. #ifndef C_MYSQL_H // 防止多次包含
  2. #define C_MYSQL_H
  3. // 导出/导入函数
  4. #ifdef MYSQL_EXPORTS
  5. #define MYSQLAPI __declspec(dllexport)
  6. #else
  7. #define MYSQLAPI __declspec(dllimport)
  8. #endif
  9. // 头文件
  10. #include "stdafx.h"
  11. #include <WinSock2.h>
  12. #include "X:\\Program Files\\MySQL\\MySQL Server 5.5\\include\\mysql.h"
  13. #include <string>
  14. using std::string;
  15. #pragma comment(lib, "libmysql.lib")// 链接动态库
  16. #pragma warning(disable:4251)// 屏蔽编译警告
  17. #pragma warning(disable:4267)
  18. #pragma warning(disable:4244)
  19. class MYSQLAPI CMySQL
  20. {
  21. public:
  22. CMySQL();
  23. virtual ~CMySQL();
  24. public:
  25. // 返回错误描述
  26. string GetErrorDesc(__in int nErrorID);
  27. // 返回错误ID
  28. int GetErrorID();
  29. // 连接MySQL数据库
  30. bool Connect(__in string szIpAddr/*Ip地址*/, __in unsigned int unPort/*端口号*/,
  31. __in string szUser/*用户名*/, __in string szPass/*密码*/, __in string szDatabase/*库名称*/);
  32. // 向数据库发送指令
  33. bool Command(__in string szComm);
  34. // 接收结果
  35. virtual bool Result(__out string **pOutBuf, __out int *pNum);
  36. protected:
  37. MYSQL *m_pMySQL;
  38. int m_nErrorID;
  39. };
  40. #endif // C_MYSQL_H

// MySQL.cpp

  1. // MySQL.cpp : 定义 DLL 应用程序的导出函数。
  2. //
  3. #include "stdafx.h"
  4. #include "MySQL.h"
  5. // 构造函数
  6. CMySQL::CMySQL()
  7. {
  8. m_nErrorID = 0;
  9. m_pMySQL = new MYSQL;
  10. mysql_init(m_pMySQL); // 初始化MySQL结构
  11. }
  12. // 析构函数
  13. CMySQL::~CMySQL()
  14. {
  15. // 销毁MySQL结构
  16. mysql_close(m_pMySQL);
  17. delete m_pMySQL;
  18. m_pMySQL = NULL;
  19. }
  20. // 返回错误描述
  21. string CMySQL::GetErrorDesc(__in int nErrorID)
  22. {
  23. switch (nErrorID)
  24. {
  25. case 0:
  26. return "执行成功";
  27. case -1:
  28. return "参数错误";
  29. case -2:
  30. return "无数据";
  31. default:
  32. return mysql_error(m_pMySQL);
  33. }
  34. }
  35. // 返回错误ID
  36. int CMySQL::GetErrorID()
  37. {
  38. int nTemp = m_nErrorID;
  39. m_nErrorID = 0;
  40. return nTemp;
  41. }
  42. // 连接MySQL数据库
  43. bool CMySQL::Connect(__in string szIpAddr, __in unsigned int unPort, __in string szUser, __in string szPass, __in string szDatabase)
  44. {
  45. if (szIpAddr.empty() || unPort <= 1024/*1024以下端口是操作系统预留端口,不可占用*/ || szUser.empty() || szPass.empty() || szDatabase.empty())
  46. {
  47. m_nErrorID = -1;
  48. return false;
  49. }
  50. // 连接MySQL服务器
  51. if (!mysql_real_connect(m_pMySQL, szIpAddr.c_str(), szUser.c_str(), szPass.c_str(), szDatabase.c_str(), unPort, NULL, 0))
  52. {
  53. m_nErrorID = mysql_errno(m_pMySQL);
  54. return false;
  55. }
  56. return true;
  57. }
  58. // 向数据库发送指令
  59. bool CMySQL::Command(__in string szComm)
  60. {
  61. if (szComm.empty()){
  62. m_nErrorID = -1;
  63. return false;
  64. }
  65. int nRet = mysql_real_query(m_pMySQL, szComm.c_str(), szComm.length());
  66. if (nRet == 0)return true;
  67. else {
  68. m_nErrorID = nRet;
  69. return false;
  70. }
  71. }
  72. // 接收结果
  73. bool CMySQL::Result(__out string **pOutBuf, __out int *pNum)
  74. {
  75. if (!pOutBuf || !pNum)// 检查参数
  76. {
  77. m_nErrorID = -1;
  78. return false;
  79. }
  80. MYSQL_RES *pRes = mysql_store_result(m_pMySQL);
  81. if (!pRes) // 检查结果集
  82. {
  83. m_nErrorID = -2;
  84. return false;
  85. }
  86. int nDataNumber = pRes->data->rows;// 有多少条(行)数据
  87. if (nDataNumber < 1) // 检查有没有数据
  88. {
  89. m_nErrorID = -2;
  90. return false;
  91. }
  92. string* pszRecvResult = new string[nDataNumber];
  93. MYSQL_ROW row;
  94. unsigned int nIndex = 0;
  95. while (row = mysql_fetch_row(pRes))// 检索结果集
  96. {
  97. int nResultRowNumber = mysql_num_fields(pRes);// 获取结果集的行数
  98. for (int i = 0; i < nResultRowNumber; i++)
  99. {
  100. pszRecvResult[nIndex] += row[i];
  101. pszRecvResult[nIndex] += "\t";
  102. }
  103. nIndex++;
  104. }
  105. mysql_free_result(pRes); // 释放结果集
  106. *pOutBuf = pszRecvResult;
  107. *pNum = nDataNumber;
  108. return true;
  109. }

  (本人文化水平有限,写得不好还请不要介意!)

  

 

转载于:https://www.cnblogs.com/LandyTan/p/8351968.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/663324
推荐阅读
相关标签
  

闽ICP备14008679号