mysql c++编程_C++ MySQL编程

MySQL编程需要包含头文件。该文件一般在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

#ifndef C_MYSQL_H // 防止多次包含

#define C_MYSQL_H

// 导出/导入函数

#ifdef MYSQL_EXPORTS

#define MYSQLAPI __declspec(dllexport)

#else

#define MYSQLAPI __declspec(dllimport)

#endif

// 头文件

#include "stdafx.h"

#include

#include "X:\\Program Files\\MySQL\\MySQL Server 5.5\\include\\mysql.h"

#include

using std::string;

#pragma comment(lib, "libmysql.lib")// 链接动态库

#pragma warning(disable:4251)// 屏蔽编译警告

#pragma warning(disable:4267)

#pragma warning(disable:4244)

class MYSQLAPI CMySQL

{

public:

CMySQL();

virtual ~CMySQL();

public:

// 返回错误描述

string GetErrorDesc(__in int nErrorID);

// 返回错误ID

int GetErrorID();

// 连接MySQL数据库

bool Connect(__in string szIpAddr/*Ip地址*/, __in unsigned int unPort/*端口号*/,

__in string szUser/*用户名*/, __in string szPass/*密码*/, __in string szDatabase/*库名称*/);

// 向数据库发送指令

bool Command(__in string szComm);

// 接收结果

virtual bool Result(__out string **pOutBuf, __out int *pNum);

protected:

MYSQL *m_pMySQL;

int m_nErrorID;

};

#endif // C_MYSQL_H

// MySQL.cpp

// MySQL.cpp : 定义 DLL 应用程序的导出函数。

//

#include "stdafx.h"

#include "MySQL.h"

// 构造函数

CMySQL::CMySQL()

{

m_nErrorID = 0;

m_pMySQL = new MYSQL;

mysql_init(m_pMySQL);// 初始化MySQL结构

}

// 析构函数

CMySQL::~CMySQL()

{

// 销毁MySQL结构

mysql_close(m_pMySQL);

delete m_pMySQL;

m_pMySQL = NULL;

}

// 返回错误描述

string CMySQL::GetErrorDesc(__in int nErrorID)

{

switch (nErrorID)

{

case 0:

return "执行成功";

case -1:

return "参数错误";

case -2:

return "无数据";

default:

return mysql_error(m_pMySQL);

}

}

// 返回错误ID

int CMySQL::GetErrorID()

{

int nTemp = m_nErrorID;

m_nErrorID = 0;

return nTemp;

}

// 连接MySQL数据库

bool CMySQL::Connect(__in string szIpAddr, __in unsigned int unPort, __in string szUser, __in string szPass, __in string szDatabase)

{

if (szIpAddr.empty() || unPort <= 1024/*1024以下端口是操作系统预留端口,不可占用*/ || szUser.empty() || szPass.empty() || szDatabase.empty())

{

m_nErrorID = -1;

return false;

}

// 连接MySQL服务器

if (!mysql_real_connect(m_pMySQL, szIpAddr.c_str(), szUser.c_str(), szPass.c_str(), szDatabase.c_str(), unPort, NULL, 0))

{

m_nErrorID = mysql_errno(m_pMySQL);

return false;

}

return true;

}

// 向数据库发送指令

bool CMySQL::Command(__in string szComm)

{

if (szComm.empty()){

m_nErrorID = -1;

return false;

}

int nRet = mysql_real_query(m_pMySQL, szComm.c_str(), szComm.length());

if (nRet == 0)return true;

else {

m_nErrorID = nRet;

return false;

}

}

// 接收结果

bool CMySQL::Result(__out string **pOutBuf, __out int *pNum)

{

if (!pOutBuf || !pNum)// 检查参数

{

m_nErrorID = -1;

return false;

}

MYSQL_RES *pRes = mysql_store_result(m_pMySQL);

if (!pRes)// 检查结果集

{

m_nErrorID = -2;

return false;

}

int nDataNumber = pRes->data->rows;// 有多少条(行)数据

if (nDataNumber < 1)// 检查有没有数据

{

m_nErrorID = -2;

return false;

}

string* pszRecvResult = new string[nDataNumber];

MYSQL_ROW row;

unsigned int nIndex = 0;

while (row = mysql_fetch_row(pRes))// 检索结果集

{

int nResultRowNumber = mysql_num_fields(pRes);// 获取结果集的行数

for (int i = 0; i < nResultRowNumber; i++)

{

pszRecvResult[nIndex] += row[i];

pszRecvResult[nIndex] += "\t";

}

nIndex++;

}

mysql_free_result(pRes);// 释放结果集

*pOutBuf = pszRecvResult;

*pNum = nDataNumber;

return true;

}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值