174 lines
3.1 KiB
C++
174 lines
3.1 KiB
C++
#ifndef _SQL_H_
|
||
#define _SQL_H_
|
||
|
||
#ifdef _MSC_VER
|
||
#undef bool //config-win.h中会把bool定义为BOOL
|
||
#endif
|
||
#include "mysql.h"
|
||
//#include <windows.h>
|
||
#include "os_def.h"
|
||
#include "x_lock.h"
|
||
|
||
using namespace lock;
|
||
|
||
class SQLConnection
|
||
{
|
||
private:
|
||
static const int BUFF_SIZE = 4096 * 10;
|
||
|
||
private:
|
||
MYSQL MySql_;
|
||
MYSQL_RES* result_set_;
|
||
my_ulonglong row_num_;
|
||
MYSQL_ROW rows_;
|
||
MYSQL_FIELD* fields_;
|
||
my_ulonglong field_num_;
|
||
my_ulonglong affect_rows_;
|
||
|
||
private:
|
||
char host_[32];
|
||
int port_;
|
||
char user_name_[64];
|
||
char pw_[64];
|
||
char db_name_[64];
|
||
size_t flag_;
|
||
char buf_[BUFF_SIZE];
|
||
Mutex lock_; //SQL查询锁
|
||
bool connected_; //是否连接的标志
|
||
bool mult_thread_; //是否多线程的标志,如果为TRUE则进行查询是会加锁
|
||
|
||
size_t err_cnt_; // 执行sql错误的数量,如果过多,则可以报警
|
||
bool infile_;
|
||
bool utf8_;
|
||
bool log_; // 是否记录sql的日志
|
||
private:
|
||
void AfterQueryed(int nError, const char* sql);
|
||
void AfterExeced(int nError, const char* sql);
|
||
|
||
public:
|
||
SQLConnection();
|
||
~SQLConnection();
|
||
|
||
inline const char* GetHost()
|
||
{
|
||
return host_;
|
||
};
|
||
void SetHost(const char* sServerHost);
|
||
inline int GetPort()
|
||
{
|
||
return port_;
|
||
};
|
||
void SetPort(int nServerPort);
|
||
inline const char* GetDbName()
|
||
{
|
||
return db_name_;
|
||
};
|
||
void SetDbName(const char* sDataBaseName);
|
||
inline const char* GetUserName()
|
||
{
|
||
return user_name_;
|
||
};
|
||
void SetUserName(const char* sUserName);
|
||
inline const char* GetPassWord()
|
||
{
|
||
return pw_;
|
||
};
|
||
void SetPassWord(const char* sPassWord);
|
||
inline size_t GetConnectionFlags()
|
||
{
|
||
return flag_;
|
||
};
|
||
void SetConnectionFlags(const size_t nFlags);
|
||
inline bool IsMultiThread()
|
||
{
|
||
return mult_thread_;
|
||
};
|
||
void SetMultiThread(bool boMultiThread);
|
||
|
||
BOOL Connect();
|
||
|
||
inline BOOL Connected()
|
||
{
|
||
return connected_;
|
||
};
|
||
void Disconnect();
|
||
|
||
inline MYSQL* GetMySql()
|
||
{
|
||
return &MySql_;
|
||
}
|
||
//Query和RealQuery用于执行带返回结果的查询操作,
|
||
//查询成功则返回0并且需要在外部调用ResetQuery来释放查询结果集并解锁,
|
||
//如果查询失败则会自动解锁。
|
||
int Query(const char* sQueryFormat, ...);
|
||
int RealQuery(const char* sQueryText, const size_t nTextLen);
|
||
|
||
//Exec和RealExec用于执行不带返回结果的查询操作,例如delete,update,create,drop,alter等
|
||
//执行成功则返回0并且需要在外部调用ResetQuery来释放查询结果集并解锁,
|
||
//如果执行失败则会自动解锁。
|
||
int Exec(const char* sQueryFormat, ...);
|
||
int RealExec(const char* sExecText, const size_t nTextLen);
|
||
|
||
void ResetQuery();
|
||
|
||
int Ping()
|
||
{
|
||
return mysql_ping(&MySql_);
|
||
}
|
||
|
||
inline int GetFieldCount()
|
||
{
|
||
return (int)field_num_;
|
||
}
|
||
inline int GetRowCount()
|
||
{
|
||
return (int)row_num_;
|
||
}
|
||
inline int GetRowsAffected()
|
||
{
|
||
return (int)affect_rows_;
|
||
}
|
||
inline MYSQL_ROW CurrentRow()
|
||
{
|
||
return rows_;
|
||
}
|
||
inline MYSQL_ROW NextRow()
|
||
{
|
||
if (result_set_)
|
||
{
|
||
rows_ = mysql_fetch_row(result_set_);
|
||
return rows_;
|
||
}
|
||
|
||
return NULL;
|
||
}
|
||
inline unsigned long* GetFieldsLength()
|
||
{
|
||
return mysql_fetch_lengths(result_set_);
|
||
}
|
||
|
||
void ClearErrCnt()
|
||
{
|
||
err_cnt_ = 0;
|
||
}
|
||
size_t GetErrCnt()
|
||
{
|
||
return err_cnt_;
|
||
}
|
||
|
||
void SetInfileFlag(bool flag)
|
||
{
|
||
infile_ = flag;
|
||
}
|
||
void SetUtf8(bool flag)
|
||
{
|
||
utf8_ = flag;
|
||
}
|
||
void SetLog(bool flag)
|
||
{
|
||
log_ = flag;
|
||
}
|
||
};
|
||
|
||
#endif
|