acl
3.5.3.0
db_service.hpp
浏览该文件的文档.
1
#pragma once
2
#include "../acl_cpp_define.hpp"
3
#include <list>
4
#include "../ipc/ipc_service.hpp"
5
#include "../stdlib/string.hpp"
6
7
#if !defined(ACL_DB_DISABLE)
8
9
namespace
acl
{
10
11
typedef
enum
12
{
13
DB_OK
,
14
DB_ERR_OPEN
,
15
DB_ERR_EXEC_SQL
,
16
}
db_status
;
17
18
//////////////////////////////////////////////////////////////////////////
19
20
class
db_rows;
21
22
class
ACL_CPP_API
db_query
23
{
24
public
:
25
db_query
(
void
) {}
26
virtual
~db_query
(
void
) {}
27
28
virtual
void
on_error(
db_status
status) = 0;
29
virtual
void
on_ok(
const
db_rows
* rows,
int
affected) = 0;
30
31
/**
32
* 当任务处理完毕或出错时,内部处理过程会自动调用 destroy 接口,
33
* 子类可以在该接口内进行一些释放过程,尤其当该对象是动态创建时,
34
* 子类应该在该函数内 delete this 以删除自己,因为该函数最终肯定
35
* 会被调用,所以子类不应在其它地方进行析构操作
36
*/
37
virtual
void
destroy
(
void
) {}
38
protected
:
39
private
:
40
};
41
42
//////////////////////////////////////////////////////////////////////////
43
44
class
db_handle;
45
class
aio_socket_stream;
46
47
/**
48
* 数据库服务类,该类是一个异步数据库操作管理类,该类对象所在的线程必须是
49
* 一个非阻塞的线程过程
50
*/
51
class
ACL_CPP_API
db_service
:
public
ipc_service
52
{
53
public
:
54
/**
55
* 当为 sqlite 数据库时的构造函数
56
* @param dblimit {size_t} 数据库连接池的个数限制
57
* @param nthread {int} 子线程池的最大线程数
58
* @param win32_gui {bool} 是否是窗口类的消息,如果是,则内部的
59
* 通讯模式自动设置为基于 _WIN32 的消息,否则依然采用通用的套接
60
* 口通讯方式
61
*/
62
db_service
(
size_t
dblimit = 100,
int
nthread = 2,
bool
win32_gui =
false
);
63
virtual
~
db_service
(
void
);
64
65
/**
66
* 异步执行 SQL 查询语句
67
* @param sql {const char*} 要执行的标准 SQL 语句
68
* @param query {db_query*} 用来接收执行结果的类对象
69
*/
70
void
sql_select(
const
char
* sql,
db_query
*
query
);
71
72
/**
73
* 异步执行 SQL 更新语句
74
* @param sql {const char*} 要执行的标准 SQL 语句
75
* @param query {db_query*} 用来接收执行结果的类对象
76
*/
77
void
sql_update(
const
char
* sql,
db_query
*
query
);
78
79
/**
80
* 向数据库连接池中添加连接对象
81
* @param db {db_handle*} 数据库连接对象
82
*/
83
void
push_back(
db_handle
* db);
84
protected
:
85
/**
86
* 需要子类实现此函数用来创建数据库对象
87
* @return {db_handle*}
88
*/
89
virtual
db_handle
* db_create() = 0;
90
91
/**
92
* 基类虚函数,当有新连接到达时基类回调此函数
93
* @param client {aio_socket_stream*} 接收到的新的客户端连接
94
*/
95
virtual
void
on_accept(
aio_socket_stream
* client);
96
97
#if defined(_WIN32) || defined(_WIN64)
98
/**
99
* 基类虚函数,当收到来自于子线程的 win32 消息时的回调函数
100
* @param hWnd {HWND} 窗口句柄
101
* @param msg {UINT} 用户自定义消息号
102
* @param wParam {WPARAM} 参数
103
* @param lParam {LPARAM} 参数
104
*/
105
virtual
void
win32_proc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
106
#endif
107
108
private
:
109
// 数据库引擎池
110
std::list<db_handle*> dbpool_;
111
112
// 数据库连接池的个数限制
113
size_t
dblimit_;
114
115
// 当前数据库连接池的个数
116
size_t
dbsize_;
117
};
118
119
}
// namespace acl
120
121
#endif // !defined(ACL_DB_DISABLE)
acl::DB_ERR_EXEC_SQL
Definition:
db_service.hpp:15
acl::DB_OK
Definition:
db_service.hpp:13
acl::query
Definition:
query.hpp:16
acl
Definition:
acl_cpp_init.hpp:4
acl::db_service
Definition:
db_service.hpp:51
acl::db_status
db_status
Definition:
db_service.hpp:11
acl::db_query::~db_query
virtual ~db_query(void)
Definition:
db_service.hpp:26
acl::DB_ERR_OPEN
Definition:
db_service.hpp:14
acl::ipc_service
Definition:
ipc_service.hpp:56
acl::db_handle
Definition:
db_handle.hpp:254
acl::db_query
Definition:
db_service.hpp:22
acl::db_rows
Definition:
db_handle.hpp:187
acl::db_query::destroy
virtual void destroy(void)
Definition:
db_service.hpp:37
acl::aio_socket_stream
Definition:
aio_socket_stream.hpp:40
ACL_CPP_API
#define ACL_CPP_API
Definition:
acl_cpp_define.hpp:16
acl::db_query::db_query
db_query(void)
Definition:
db_service.hpp:25
include
acl_cpp
db
db_service.hpp
生成于 2021年 九月 10日 星期五 11:14:44 , 为 acl使用
1.8.15