c++访问mysql类
来源:互联网 发布:手机淘宝怎么上传照片 编辑:程序博客网 时间:2024/06/10 08:05
//MySqlConn.h
#pragma once
#include <WinSock.h>
#include <mysql.h>
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"libmysql.lib")
enum
{
CmdText = 0,
CmdFunc,
CmdStore,
};
class MySqlConn
{
public:
MySqlConn(void);
~MySqlConn(void);
private:
MYSQL *m_MySql;
char *m_pConnStr;
CRITICAL_SECTION m_csConn;
LARGE_INTEGER m_CountsOfSecond;
LARGE_INTEGER m_PrevCounts;
LARGE_INTEGER m_CurrCounts;
public:
bool InitConnect(const char* phost,const char* pUser,const char* pPwd,const char* pDbname,double &ftime, UINT uPort = 3306);
void CloseMysqlConn(void);
MYSQL_RES* GetResult(const char* pParam,double &ftime,UINT uType = CmdText);
void Lock(void);
void UnLock(void);
void ReleaseRes(MYSQL_RES* result);
};
//MySqlConn.cpp
#include <stdio.h>
#include "MySqlConn.h"
MySqlConn::MySqlConn(void)
{
m_MySql = NULL;
m_pConnStr = NULL;
InitializeCriticalSection(&m_csConn);
QueryPerformanceFrequency(&m_CountsOfSecond);
}
MySqlConn::~MySqlConn(void)
{
if(m_pConnStr)
{
delete[] m_pConnStr;
m_pConnStr = NULL;
}
DeleteCriticalSection(&m_csConn);
mysql_library_end();
}
/************************************************************************/
/*初始化mysql连接
bool InitConnect(
const char* phost, [IN]数据库IP地址,本机: localhost
const char* pUser, [IN]数据库登录用户 root
const char* pPwd, [IN]数据库登录密码,若为空: NULL
const char* pDbname, [IN]数据库名称: database
double &ftime, [OUT]连接数据库需要的时间: s
UINT uPort [IN]数据库开放端口: 3306
)
*/
/************************************************************************/
bool MySqlConn::InitConnect(const char* phost,const char* pUser,const char* pPwd,const char* pDbname,double &ftime,UINT uPort /* = 3306 */)
{
QueryPerformanceCounter(&m_PrevCounts);
m_MySql = mysql_init(0);
if(!mysql_real_connect(m_MySql,phost,pUser,pPwd,pDbname,uPort,NULL,CLIENT_MULTI_STATEMENTS))
{
QueryPerformanceCounter(&m_CurrCounts);
ftime = ((double)(m_CurrCounts.QuadPart - m_PrevCounts.QuadPart)) / m_CountsOfSecond.QuadPart;
const char* pErr = mysql_error(m_MySql);
printf(pErr);
return false;
}
QueryPerformanceCounter(&m_CurrCounts);
ftime = ((double)(m_CurrCounts.QuadPart - m_PrevCounts.QuadPart)) / m_CountsOfSecond.QuadPart;
return true;
}
void MySqlConn::CloseMysqlConn(void)
{
mysql_close(m_MySql);
}
/************************************************************************/
/*获取数据结果集
MYSQL_RES* MySqlConn::GetResult(
const char* pParam, [IN]数据库sql语句: select * from table / call procedrue / select function
double &ftime [OUT]访问数据库所用时间: s
UINT uType [IN]数据库访问类型CmdText,CmdFunc,CmdStore
)
*/
/************************************************************************/
MYSQL_RES* MySqlConn::GetResult(const char* pParam,double &ftime,UINT uType)
{
MYSQL_RES *pResult;
QueryPerformanceCounter(&m_PrevCounts);
Lock();
if(uType = CmdStore)
{
if(mysql_query(m_MySql,pParam) != 0)
{
UnLock();
QueryPerformanceCounter(&m_CurrCounts);
ftime = ((double)(m_CurrCounts.QuadPart - m_PrevCounts.QuadPart)) / m_CountsOfSecond.QuadPart;
const char* pErr = mysql_error(m_MySql);
printf(pErr);
return NULL;
}
}
else
{
if((mysql_real_query(m_MySql,pParam,strlen(pParam))) != 0)
{
UnLock();
QueryPerformanceCounter(&m_CurrCounts);
ftime = ((double)(m_CurrCounts.QuadPart - m_PrevCounts.QuadPart)) / m_CountsOfSecond.QuadPart;
const char* pErr = mysql_error(m_MySql);
printf(pErr);
return NULL;
}
}
pResult = mysql_use_result(m_MySql);
if(!pResult)
{
UnLock();
QueryPerformanceCounter(&m_CurrCounts);
ftime = ((double)(m_CurrCounts.QuadPart - m_PrevCounts.QuadPart)) / m_CountsOfSecond.QuadPart;
const char* pErr = mysql_error(m_MySql);
printf(pErr);
return NULL;
}
UnLock();
QueryPerformanceCounter(&m_CurrCounts);
ftime = ((double)(m_CurrCounts.QuadPart - m_PrevCounts.QuadPart)) / m_CountsOfSecond.QuadPart;
return pResult;
}
/************************************************************************/
/*释放数据结果集
void MySqlConn::ReleaseRes(
MYSQL_RES* result [IN]需要释放的结果集
)
*/
/************************************************************************/
void MySqlConn::ReleaseRes(MYSQL_RES* result)
{
if(result)
{
mysql_free_result(result);
}
}
void MySqlConn::Lock(void)
{
EnterCriticalSection(&m_csConn);
}
void MySqlConn::UnLock(void)
{
LeaveCriticalSection(&m_csConn);
}
#pragma once
#include <WinSock.h>
#include <mysql.h>
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"libmysql.lib")
enum
{
CmdText = 0,
CmdFunc,
CmdStore,
};
class MySqlConn
{
public:
MySqlConn(void);
~MySqlConn(void);
private:
MYSQL *m_MySql;
char *m_pConnStr;
CRITICAL_SECTION m_csConn;
LARGE_INTEGER m_CountsOfSecond;
LARGE_INTEGER m_PrevCounts;
LARGE_INTEGER m_CurrCounts;
public:
bool InitConnect(const char* phost,const char* pUser,const char* pPwd,const char* pDbname,double &ftime, UINT uPort = 3306);
void CloseMysqlConn(void);
MYSQL_RES* GetResult(const char* pParam,double &ftime,UINT uType = CmdText);
void Lock(void);
void UnLock(void);
void ReleaseRes(MYSQL_RES* result);
};
//MySqlConn.cpp
#include <stdio.h>
#include "MySqlConn.h"
MySqlConn::MySqlConn(void)
{
m_MySql = NULL;
m_pConnStr = NULL;
InitializeCriticalSection(&m_csConn);
QueryPerformanceFrequency(&m_CountsOfSecond);
}
MySqlConn::~MySqlConn(void)
{
if(m_pConnStr)
{
delete[] m_pConnStr;
m_pConnStr = NULL;
}
DeleteCriticalSection(&m_csConn);
mysql_library_end();
}
/************************************************************************/
/*初始化mysql连接
bool InitConnect(
const char* phost, [IN]数据库IP地址,本机: localhost
const char* pUser, [IN]数据库登录用户 root
const char* pPwd, [IN]数据库登录密码,若为空: NULL
const char* pDbname, [IN]数据库名称: database
double &ftime, [OUT]连接数据库需要的时间: s
UINT uPort [IN]数据库开放端口: 3306
)
*/
/************************************************************************/
bool MySqlConn::InitConnect(const char* phost,const char* pUser,const char* pPwd,const char* pDbname,double &ftime,UINT uPort /* = 3306 */)
{
QueryPerformanceCounter(&m_PrevCounts);
m_MySql = mysql_init(0);
if(!mysql_real_connect(m_MySql,phost,pUser,pPwd,pDbname,uPort,NULL,CLIENT_MULTI_STATEMENTS))
{
QueryPerformanceCounter(&m_CurrCounts);
ftime = ((double)(m_CurrCounts.QuadPart - m_PrevCounts.QuadPart)) / m_CountsOfSecond.QuadPart;
const char* pErr = mysql_error(m_MySql);
printf(pErr);
return false;
}
QueryPerformanceCounter(&m_CurrCounts);
ftime = ((double)(m_CurrCounts.QuadPart - m_PrevCounts.QuadPart)) / m_CountsOfSecond.QuadPart;
return true;
}
void MySqlConn::CloseMysqlConn(void)
{
mysql_close(m_MySql);
}
/************************************************************************/
/*获取数据结果集
MYSQL_RES* MySqlConn::GetResult(
const char* pParam, [IN]数据库sql语句: select * from table / call procedrue / select function
double &ftime [OUT]访问数据库所用时间: s
UINT uType [IN]数据库访问类型CmdText,CmdFunc,CmdStore
)
*/
/************************************************************************/
MYSQL_RES* MySqlConn::GetResult(const char* pParam,double &ftime,UINT uType)
{
MYSQL_RES *pResult;
QueryPerformanceCounter(&m_PrevCounts);
Lock();
if(uType = CmdStore)
{
if(mysql_query(m_MySql,pParam) != 0)
{
UnLock();
QueryPerformanceCounter(&m_CurrCounts);
ftime = ((double)(m_CurrCounts.QuadPart - m_PrevCounts.QuadPart)) / m_CountsOfSecond.QuadPart;
const char* pErr = mysql_error(m_MySql);
printf(pErr);
return NULL;
}
}
else
{
if((mysql_real_query(m_MySql,pParam,strlen(pParam))) != 0)
{
UnLock();
QueryPerformanceCounter(&m_CurrCounts);
ftime = ((double)(m_CurrCounts.QuadPart - m_PrevCounts.QuadPart)) / m_CountsOfSecond.QuadPart;
const char* pErr = mysql_error(m_MySql);
printf(pErr);
return NULL;
}
}
pResult = mysql_use_result(m_MySql);
if(!pResult)
{
UnLock();
QueryPerformanceCounter(&m_CurrCounts);
ftime = ((double)(m_CurrCounts.QuadPart - m_PrevCounts.QuadPart)) / m_CountsOfSecond.QuadPart;
const char* pErr = mysql_error(m_MySql);
printf(pErr);
return NULL;
}
UnLock();
QueryPerformanceCounter(&m_CurrCounts);
ftime = ((double)(m_CurrCounts.QuadPart - m_PrevCounts.QuadPart)) / m_CountsOfSecond.QuadPart;
return pResult;
}
/************************************************************************/
/*释放数据结果集
void MySqlConn::ReleaseRes(
MYSQL_RES* result [IN]需要释放的结果集
)
*/
/************************************************************************/
void MySqlConn::ReleaseRes(MYSQL_RES* result)
{
if(result)
{
mysql_free_result(result);
}
}
void MySqlConn::Lock(void)
{
EnterCriticalSection(&m_csConn);
}
void MySqlConn::UnLock(void)
{
LeaveCriticalSection(&m_csConn);
}
- mysql c远程访问
- C API 访问mysql
- Linux C访问MySQL
- c 访问 mysql
- C访问MySQL
- linux c 访问mysql
- c/c++访问mysql(gcc)
- MYSQL C API 访问程序
- linux C访问mysql 基础
- 使用c语言访问mysql
- linux C访问mysql 基础
- linux-c编程-访问mysql
- c语言访问MySQL数据库
- C语言访问MySQL数据库
- Simple MySQL-C ORM - 简化C语言访问MySQL
- 用VC7访问mysql C API
- Linux c访问mysql 编写入门
- Linux下C访问MySQL实践
- Extjs中加载异步树的最简单例子实现
- 内功修炼之操作系统学习(二:处理器管理)
- 希腊字母表
- 微软安全新闻聚焦-双周刊第十六期
- 微博开发遇到的各种问题和解决办法
- c++访问mysql类
- Linq学习比较第2篇
- JS操作iframe
- SAP中会计凭证的讲解
- 32位ubuntu10.04编译Android4.0.1内核
- 高可用消息队列服务构建-RABBITMQ
- mysql字段对索引的影响
- Css中的度量单位 px em ex pt pc in mm cm
- 给多个button批量添加监听器