Files
mir_server/Gateway/srvlib/include/db/sql_connection.h
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

174 lines
3.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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