MySqlHelper

MySqlHelper.h

 

#ifndef  DATACONTROL_H
#define DATACONTROL_H

#pragma once
#include <WinSock2.h>
#include <map>
#include <vector>
#include <iostream>
#include "Sql/mysql.h"

using namespace std;
class MySqlHelper
{
public:
 MySqlHelper(void);

 ~MySqlHelper(void);

public:
 //连接数据库
 int FunConnectData(const CString &host,//主机或者IP地址
  const CString &user, //用户名
  const CString &passwd,//密码
  const CString &db,//数据库名
  UINT port,//端口
  UINT client_flag);//客户连接参数

 //批量执行SQL
 void MultiInsert(const char *pSQL);

 //关闭数据库连接
 void CloseDataConnect();

 //查询sql
 void ExecuteQuerySql();

 //开始事物
 UINT Start_Transaction();

 //提交事务(入库)
 UINT Commit();

 //回滚事务
 UINT Rollback();

 //调用存储过程
 void CallPrc_AfterInsert(const CString &PrcName,const CString &strFileName,CString &strRetMsg);

 /*处理返回多行的查询,返回影响的行数,pQuerySQL含Select的SQL语句
   QuerySQL可通过fetch_QuerySQL取得结果,之后调用ReleaseAfterQuerySQL释放资源*/
 MYSQL_RES* QuerySQL(const char *pQuerySQL);

 //取得QuerySQL后的数据
 MYSQL_ROW fetch_QuerySQL(MYSQL_RES *SQL_RES);

 //释放执行SQL语句后的资源
 void ReleaseAfterQuerySQL(MYSQL_RES *SQL_RES);

public:
 //标示是否已经进行了数据库连接
 bool m_bIsConnect;

 //是否已提交事务
 bool m_isCommit;

 //记录SQL语句条数
 unsigned long m_SQLCount;

 //sql对象
 MYSQL *m_SQLHandle;

};
#endif

 

 

 

MySqlHelper.cpp

 

#include "stdafx.h"
#include "MySqlHelper.h"


MySqlHelper::MySqlHelper(void)
{
 m_bIsConnect = false;
 m_isCommit = true;
 m_SQLHandle=mysql_init(NULL);
 //指定连接断开时,自动重连接
 char ch = 1;
 mysql_options(m_SQLHandle, MYSQL_OPT_RECONNECT, (char *)&ch);
 mysql_options(m_SQLHandle, MYSQL_SET_CHARSET_NAME, "gb2312");
}


MySqlHelper::~MySqlHelper(void)
{
 CloseDataConnect();
}


int MySqlHelper::FunConnectData(const CString &host,//主机或者IP地址
         const CString &user, //用户名
         const CString &passwd,//密码
         const CString &db,//数据库名
         UINT port,//端口
         UINT client_flag)//客户连接参数
{
 CloseDataConnect();
 if (NULL == m_SQLHandle)
 {
  return -1;
 }

 if(mysql_real_connect(m_SQLHandle, host, user, passwd, db, port, NULL, client_flag) == NULL)
 {
  //连接数据库失败
  //cout<<TEXT("数据库连接失败")<<endl;
  return -1;
 }

 m_bIsConnect = TRUE;
 return 0;
}

void MySqlHelper::MultiInsert(const char *pSQL)
{
 CString strErrmsg;
 MYSQL_RES *presult;

 if (mysql_query(m_SQLHandle,pSQL) != 0)
 {
  return;
 }
 do
 {
  presult = mysql_store_result(m_SQLHandle);
  mysql_free_result(presult);
  m_SQLCount ++;
 }while(!mysql_next_result(m_SQLHandle));

 if (mysql_errno(m_SQLHandle) != 0)
 {
  return;
 }
}


void MySqlHelper::CloseDataConnect()
{
 if (m_bIsConnect)
 {
  mysql_close(m_SQLHandle);
  m_bIsConnect = FALSE;
 }
}


UINT MySqlHelper::Start_Transaction()
{
 if (m_isCommit&&(mysql_autocommit(m_SQLHandle, 0)  == 0))
 {
  m_isCommit = false;
  m_SQLCount = 0;
  return 0;
 }
 return -1;
}


UINT MySqlHelper::Commit()
{
 if ((!m_isCommit)&&(mysql_commit(m_SQLHandle) == 0))
 {
  m_isCommit = true;
  return 0;
 }
 return -1;
}


UINT MySqlHelper::Rollback()
{
 if ((!m_isCommit)&&(mysql_rollback(m_SQLHandle) == 0))
 {
  m_isCommit = true;
  return 0;
 }
 return -1;
}


void MySqlHelper::CallPrc_AfterInsert(const CString &PrcName,const CString &strFileName,CString &strRetMsg)
{
 CString strSQL,strErrMsg;
 //保存查询的结果俄
 MYSQL_ROW  row;
 strSQL.Format("call %s (\'%s\',@ret)",PrcName,strFileName);
 if(mysql_real_query(m_SQLHandle,strSQL,strSQL.GetLength()) !=  0)
 {
  return;
 }
 MYSQL_RES *Res =QuerySQL("SELECT @ret");
 row = fetch_QuerySQL(Res);
 strRetMsg = row[0];
 ReleaseAfterQuerySQL(Res);
}


MYSQL_RES* MySqlHelper::QuerySQL(const char *pQuerySQL)
{
 if (NULL == m_SQLHandle)
 {
  return NULL;
 }

 MYSQL_RES *presult;
 if (mysql_real_query(m_SQLHandle,pQuerySQL,strlen(pQuerySQL)) == 0)
 {
  //保存查询的结果
  presult=mysql_store_result(m_SQLHandle);
  //得到记录数量
  return presult;
 }
 return NULL;
}

inline MYSQL_ROW MySqlHelper::fetch_QuerySQL(MYSQL_RES *SQL_RES)
{
 MYSQL_ROW myRow;
 myRow = mysql_fetch_row(SQL_RES);
 return (myRow != NULL) ? myRow : NULL;
}


void MySqlHelper::ReleaseAfterQuerySQL(MYSQL_RES *SQL_RES)
{
 if (NULL != SQL_RES)
 {
  mysql_free_result(SQL_RES);
  SQL_RES =NULL;
 }
}

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值