acl  3.5.3.0
db_mysql.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../acl_cpp_define.hpp"
3 #include "../stdlib/string.hpp"
4 #include "../db/db_handle.hpp"
5 
6 #if !defined(ACL_CLIENT_ONLY) && !defined(ACL_DB_DISABLE)
7 
8 typedef struct st_mysql MYSQL;
9 
10 namespace acl {
11 
12 class mysql_conf;
13 
15 {
16 public:
17  /**
18  * 构造函数方式一
19  * @param dbaddr {const char*} 数据库监听地址,可以为 TCP 套接口或在 UNIX
20  * 平台下的域套接口,格式如:127.0.0.1:3306,或 /tmp/mysql.sock
21  * @param dbname {const char*} 数据库名称,非 NULL
22  * @param dbuser {const char*} 连接数据库时的用户名
23  * @param dbpass {const char*} 连接数据库时的用户密码
24  * @param dbflags {unsigned long} 连接 MYSQL 时的标志位
25  * @param auto_commit {bool} 当对数据库进行修改时是否自动提交事务
26  * @param conn_timeout {int} 连接数据库的超时时间(秒)
27  * @param rw_timeout {int} 进行数据库操作时的超时时间(秒)
28  * @param charset {const char*} 连接数据库时的本地字符集(gbk, utf8, ...)
29  */
30  db_mysql(const char* dbaddr, const char* dbname,
31  const char* dbuser, const char* dbpass,
32  unsigned long dbflags = 0, bool auto_commit = true,
33  int conn_timeout = 60, int rw_timeout = 60,
34  const char* charset = "utf8");
35 
36  /**
37  * 构造函数方式二:使用参数配置类对象进行构造
38  * @param conf {const mysql_conf&} mysql 数据库连接配置类对象
39  */
40  db_mysql(const mysql_conf& conf);
41  ~db_mysql(void);
42 
43  /**
44  * 获得 mysql 客户端库的版本号
45  * @return {unsigned long}
46  */
47  unsigned long mysql_libversion(void) const;
48 
49  /**
50  * 获得 mysql 客户端库的信息
51  * @return {const char*}
52  */
53  const char* mysql_client_info(void) const;
54 
55  /**
56  * 直接获得 mysql 的连接句柄,如果返回 NULL 则表示 mysql 还没有打开
57  * 或出错时内部自动关闭了 mysql 连接
58  * @return {MYSQL*}
59  */
60  MYSQL* get_conn(void) const
61  {
62  return conn_;
63  }
64 
65  /**
66  * 当动态加载 libmysqlclient.so / libmysqlclient.dll 时,可以调用本
67  * 静态函数显式动态加载 mysql 客户端库,如果加载失败,内部会自动产生
68  * 断言,以免运行时出错,也可不调用本函数,使 db_mysql 类对象内部在
69  * 使用时隐式加载 mysql 动态库
70  */
71  static void load(void);
72 
73  /********************************************************************/
74  /* 以下为基类 db_handle 的虚接口 */
75  /********************************************************************/
76 
77  /**
78  * @override
79  */
80  const char* dbtype(void) const;
81 
82  /**
83  * @override
84  */
85  int get_errno(void) const;
86 
87  /**
88  * @override
89  */
90  const char* get_error(void) const;
91 
92  /**
93  * @override
94  */
95  bool dbopen(const char* charset = NULL);
96 
97  /**
98  * @override
99  */
100  bool is_opened(void) const;
101 
102  /**
103  * @override
104  */
105  bool close(void);
106 
107  /**
108  * @override
109  */
110  bool tbl_exists(const char* tbl_name);
111 
112  /**
113  * @override
114  */
115  bool sql_select(const char* sql, db_rows* result = NULL);
116 
117  /**
118  * @override
119  */
120  bool sql_update(const char* sql);
121 
122  /**
123  * @override
124  */
125  int affect_count(void) const;
126 
127  /**
128  * @override
129  * 基类 db_handle 的虚函数,用来表示事务的开始,注意若要使用事务方式,
130  * 则需要在 db_mysql 的构造函数中传入的参数 auto_commit 为 false
131  */
132  bool begin_transaction(void);
133 
134  /**
135  * @override
136  */
137  bool commit(void);
138 
139  /**
140  * @override
141  */
142  bool rollback(void);
143 
144 private:
145  char* dbaddr_; // 数据库监听地址
146  char* dbname_; // 数据库名
147  char* dbuser_; // 数据库账号
148  char* dbpass_; // 数据库账号密码
149  string charset_; // 连接数据库采用的字符集
150 
151  unsigned long dbflags_;
152  int conn_timeout_;
153  int rw_timeout_;
154  bool auto_commit_;
155  MYSQL* conn_;
156 
157  bool sane_mysql_query(const char* sql);
158  void sane_mysql_init(const char* dbaddr, const char* dbname,
159  const char* dbuser, const char* dbpass,
160  unsigned long dbflags, bool auto_commit,
161  int conn_timeout, int rw_timeout,
162  const char* charset);
163 };
164 
165 } // namespace acl
166 
167 #endif // !defined(ACL_CLIENT_ONLY) && !defined(ACL_DB_DISABLE)
struct st_mysql MYSQL
Definition: db_mysql.hpp:8
MYSQL * get_conn(void) const
Definition: db_mysql.hpp:60
#define ACL_CPP_API