acl  3.5.3.0
acl_dbsql.h
浏览该文件的文档.
1 #ifndef ACL_DBSQL_INCLUDE_H
2 #define ACL_DBSQL_INCLUDE_H
3 
4 #ifndef ACL_CLIENT_ONLY
5 
6 #ifdef __cplusplus
7 extern "C" {
8 #endif
9 
10 #include "../stdlib/acl_define.h"
11 #include "acl_dbpool.h"
12 
13 #ifndef ACL_DB_ATOU
14 #define ACL_DB_ATOU(_str_) (_str_ ? strtoul(_str_, (char **) NULL, 10) : 0)
15 #endif
16 
17 /**
18  * 数据库查询语句,根据用户输入的 select SQL 语句从数据库里查询结果
19  * @param handle {ACL_DB_HANDLE*} 数据库连接句柄,不能为空
20  * @param sql {const char*} select 查询语句,不能为空
21  * @param error {int*} 如果返回值 NULL 且该变量非空指针则该指针的地址被
22  * 赋予出错的错误号,错误号参见 acl_dberr.h
23  * @return {ACL_SQL_RES*} 查询结果集,如果查询失败或查询结果为空,则返回
24  * NULL,否则返回 ACL_SQL_RES 对象(用完后该结果需要调用 acl_dbsql_free_result
25  * 释放),示例:
26  *
27  * ACL_DB_HANDLE* handle = ...;
28  * ACL_SQL_RES* res = acl_dbsql_select(...);
29  * ACL_ITER iter;
30  * if (res)
31  * {
32  * acl_foreach(iter, res)
33  * {
34  * const char **my_row = (const char**) iter.data;
35  * printf("first item: %s\n", my_row[0]);
36  * ...
37  * }
38  * acl_dbsql_free_result(handle, res);
39  * }
40  *
41  */
43  const char *sql, int *error);
44 
45 /**
46  * 释放由 acl_dbsql_select 返回的结果集对象
47  * @param handle {ACL_DB_HANDLE*} 数据库连接句柄,不能为空
48  * @param res {ACL_SQL_RES*} acl_dbsql_select 返回的结果对象,不能为空
49  */
50 ACL_API void acl_dbsql_free_result(ACL_DB_HANDLE *handle, ACL_SQL_RES *res);
51 
52 /**
53  * 以回调的方式查询数据库中所有符合条件的结果集,查询结果集合通过用户设置
54  * 的回调函数返回给用户
55  * @param handle {ACL_DB_HANDLE*} 数据库连接句柄,不能为空
56  * @param sql {const char*} select 查询语句,不能为空
57  * @param error {int*} 如果返回值 -1 且该变量非空指针则该指针的地址被
58  * 赋予出错的错误号,错误号参见 acl_dberr.h
59  * @param walk_fn {int (*)(const void**, void*)},用户设置的查询结果回调函数,
60  * 非空,每查一条符合条件的结果都回调用该回调函数,如果查询结果为多条,则会
61  * 自动回调多次该回调函数,其中的 result_row 是一个数组指针,用户可以在自己
62  * 的回调函数里用 result_row[i] 来取得自己所要求的数据列(必须与 select 语句
63  * 中的相匹配)
64  * @param arg {void*} 用户自定义的参数,该参数会自动传递给 walk_fn 回调函数,
65  * 作为 walk_fn 的最后一个参数返回
66  * @return {int} 查询结果总数,如果返回 -1 则表示查询语句失败,0 表示没有符合
67  * 查询条件的结果,> 0 表示查询的结果总数
68  */
69 ACL_API int acl_dbsql_results(ACL_DB_HANDLE *handle, const char *sql, int *error,
70  int (*walk_fn)(const void** result_row, void *arg), void *arg);
71 
72 /**
73  * 以回调的方式从数据库中查询一条记录,查询结果通过用户设置的回调函数返回给用户
74  * @param handle {ACL_DB_HANDLE*} 数据库连接句柄,不能为空
75  * @param sql {const char*} select 查询语句,不能为空
76  * @param error {int*} 如果返回值 -1 且该变量非空指针则该指针的地址被
77  * 赋予出错的错误号,错误号参见 acl_dberr.h
78  * @param walk_fn {int (*)(const void**, void*)},用户设置的查询结果回调函数,
79  * 非空,当查到一条符合条件的结果时便回调用该回调函数,与 acl_dbsql_results 不
80  * 同,该回调函数最多只会被调用一次,其中的 result_row 是一个数组指针,用户可
81  * 以在自己的回调函数里用 result_row[i] 来取得自己所要求的数据列(必须与 select
82  * 语句中的相匹配)
83  * @param arg {void*} 用户自定义的参数,该参数会自动传递给 walk_fn 回调函数,
84  * 作为 walk_fn 的最后一个参数返回
85  * @return {int} 返回值只有三种状态,-1 表示查询语句失败,0 表示查询结果为空,
86  * 1 表示查到一个结果;如果返回 -1 则 *error 记录着失败原因,参见 acl_dberr.h
87  */
88 ACL_API int acl_dbsql_result(ACL_DB_HANDLE *handle, const char *sql, int *error,
89  int (*walk_fn)(const void** result_row, void *arg), void *arg);
90 
91 /**
92  * 更新数据库数据,update, insert, delete 等修改数据库的操作可以使用该函数
93  * @param handle {ACL_DB_HANDLE*} 数据库连接句柄,不能为空
94  * @param sql {const char*} 数据库修改语句,不能为空
95  * @param error {int*} 如果返回值 -1 且该变量非空指针则该指针的地址被
96  * 赋予出错的错误号,错误号参见 acl_dberr.h
97  * @return {int} 返回值只有三种状态,-1 表示失败(如果 error 指针非空则其中记录着
98  * 出错原因,错误号参见: acl_dberr.h),0 表示更新成功,但并未影响数据库原始信息
99  * (原因是本信息与数据库原信息相同),> 0 表示更新了数据库中数据存储条数
100  */
101 ACL_API int acl_dbsql_update(ACL_DB_HANDLE *handle, const char *sql, int *error);
102 
103 #ifdef __cplusplus
104 }
105 #endif
106 
107 #endif /* ACL_CLIENT_ONLY */
108 #endif
109 
ACL_API void acl_dbsql_free_result(ACL_DB_HANDLE *handle, ACL_SQL_RES *res)
ACL_API int acl_dbsql_update(ACL_DB_HANDLE *handle, const char *sql, int *error)
ACL_API ACL_SQL_RES * acl_dbsql_select(ACL_DB_HANDLE *handle, const char *sql, int *error)
ACL_API int acl_dbsql_results(ACL_DB_HANDLE *handle, const char *sql, int *error, int(*walk_fn)(const void **result_row, void *arg), void *arg)
ACL_API int acl_dbsql_result(ACL_DB_HANDLE *handle, const char *sql, int *error, int(*walk_fn)(const void **result_row, void *arg), void *arg)