-
Notifications
You must be signed in to change notification settings - Fork 0
/
orion_link_db.h
184 lines (155 loc) · 8.19 KB
/
orion_link_db.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#ifndef ORION_LINK_DB_H
#define ORION_LINK_DB_H
#include "orion_link_data.h"
#include <vector>
struct MYSQL;
struct MYSQL_RES;
namespace ol
{
class ORIONLINKDB_API OrionLinkDB
{
public:
///////////////////////////////////////////////////////////////////////////
/// @brief 初始化 MySQL API
/// @return 初始化是否成功
///////////////////////////////////////////////////////////////////////////
bool Init();
///////////////////////////////////////////////////////////////////////////
/// @brief 清理 MySQL 资源
void Close();
///////////////////////////////////////////////////////////////////////////
/// @brief 开始连接数据库 (MySQL未初始化,内部会初始化)
/// @param host 主机IP地址
/// @param user 用户名
/// @param password 密码
/// @param db 数据库
/// @param port 端口号
/// @param flag 设置支持多条SQL语句
/// @return 连接是否成功
///////////////////////////////////////////////////////////////////////////
bool Connect(const char* host, const char* user, const char* password,
const char* db, unsigned short port = 3306, unsigned long flag = 0);
///////////////////////////////////////////////////////////////////////////
/// @brief 执行SQL语句,如果 sqllen = 0,内部会使用 strlen(sql)
/// @param sql SQL语句
/// @param sqllen SQL语句的长度
/// @return 执行是否成功
///////////////////////////////////////////////////////////////////////////
bool Query(const char* sql, unsigned long sqllen = 0);
///////////////////////////////////////////////////////////////////////////
/// @brief MySQL参数的设定 (在Connect之前调用)
/// @param opt 操作
/// @param arg 参数
/// @return 执行是否成功
///////////////////////////////////////////////////////////////////////////
bool Options(orion_option opt, const void* arg);
///////////////////////////////////////////////////////////////////////////
/// @brief 设置超时时间
/// @param sec 超时时间 (单位秒)
/// @return 设置是否成功
///////////////////////////////////////////////////////////////////////////
bool SetConnectTimeout(int sec);
///////////////////////////////////////////////////////////////////////////
/// @brief 设置自动重连
/// @param isre 是否开启自动重连
/// @return 设置是否成功
///////////////////////////////////////////////////////////////////////////
bool SetReconnect(bool isre = true);
///////////////////////////////////////////////////////////////////////////
/// @brief 结果集获取 (返回全部结果)
/// @return 结果集获取是否成功
///////////////////////////////////////////////////////////////////////////
bool StoreResult();
///////////////////////////////////////////////////////////////////////////
/// @brief 结果集获取 (通过Fetch获取)
/// @return 结果集获取是否成功
///////////////////////////////////////////////////////////////////////////
bool UseResult();
///////////////////////////////////////////////////////////////////////////
/// @brief 清理结果集
void FreeResult();
///////////////////////////////////////////////////////////////////////////
/// @brief 获取一行数据
/// @return 返回 OLData 结构体对象数组
///////////////////////////////////////////////////////////////////////////
std::vector<OLData> FetchRow();
///////////////////////////////////////////////////////////////////////////
/// @brief 获取列名称
/// @return 返回 OLData 结构体对象数组
///////////////////////////////////////////////////////////////////////////
std::vector<char*> FetchFieldsName();
///////////////////////////////////////////////////////////////////////////
/// @brief 格式化显示(字符串数据)结果,limit = 0 or offset = 0 表示显示所有 (基于select语句限制的结果)
/// @param width 列宽
/// @param limit 显示几行数据
/// @param offset 从第几行开始 + 1
void ShowFormatResult(int width = 20, int limit = 0, int offset = 0);
///////////////////////////////////////////////////////////////////////////
/// @brief 生成 SQL 语句
/// @param kv map<std::string, OLData>
/// @param table 表名
/// @return 生成的 SQL 语句
///////////////////////////////////////////////////////////////////////////
std::string GetInsertSQL(const KVData& kv, const std::string& table);
///////////////////////////////////////////////////////////////////////////
/// @brief 插入非二进制数据
/// @param kv map<std::string, OLData>
/// @param table 表名
/// @return 插入是否成功
///////////////////////////////////////////////////////////////////////////
bool Insert(const KVData& kv, const std::string& table);
///////////////////////////////////////////////////////////////////////////
/// @brief 插入二进制数据
/// @param kv map<std::string, OLData>
/// @param table 表名
/// @return 插入是否成功
///////////////////////////////////////////////////////////////////////////
bool InsertBin(const KVData& kv, const std::string& table);
///////////////////////////////////////////////////////////////////////////
/// @brief 获取更新数据的SQL语句,需要用户包含 where
/// @param kv map<std::string, OLData>
/// @param table 表名
/// @param where SQL语句的where子句
/// @return update SQL语句
///////////////////////////////////////////////////////////////////////////
std::string GetUpdateSQL(const KVData& kv, const std::string& table, const std::string& where);
///////////////////////////////////////////////////////////////////////////
/// @brief 修改非二进制数据
/// @param kv map<std::string, OLData>
/// @param table 表名
/// @param where SQL语句的where子句
/// @return 返回更新数据量,失败返回-1
///////////////////////////////////////////////////////////////////////////
int Update(const KVData& kv, const std::string& table, const std::string& where);
///////////////////////////////////////////////////////////////////////////
/// @brief 修改二进制数据
/// @param kv map<std::string, OLData>
/// @param table 表名
/// @param where SQL语句的where子句
/// @return 返回更新数据量,失败返回-1
///////////////////////////////////////////////////////////////////////////
int UpdateBin(const KVData& kv, const std::string& table, const std::string& where);
///////////////////////////////////////////////////////////////////////////
/// @brief 开启事务, 开启手动提交
bool StartTransaction();
///////////////////////////////////////////////////////////////////////////
/// @brief 关闭手动提交
bool StopTransaction();
///////////////////////////////////////////////////////////////////////////
/// @brief 事务提交
bool Commit();
///////////////////////////////////////////////////////////////////////////
/// @brief 事务回滚
bool Rollback();
///////////////////////////////////////////////////////////////////////////
/// @brief 获取select后的结果集,每次调用默认清理上一次结果集
/// @param sql 查询的sql语句
/// @return 返回结果对象
///////////////////////////////////////////////////////////////////////////
OLROWS GetResult(const char *sql);
protected:
MYSQL* mysql_ = nullptr;
MYSQL_RES* result_ = nullptr;
};
}
#endif // ORION_LINK_DB_H