acl  3.5.3.0
acl::db_handle类 参考abstract

#include <db_handle.hpp>

+ 类 acl::db_handle 继承关系图:
+ acl::db_handle 的协作图:

Public 成员函数

 db_handle (void)
 
virtual ~db_handle (void)
 
bool open ()
 
virtual const char * dbtype () const =0
 
virtual int get_errno () const
 
virtual const char * get_error () const
 
virtual bool dbopen (const char *charset=NULL)=0
 
virtual bool is_opened () const =0
 
virtual bool tbl_exists (const char *tbl_name)=0
 
virtual bool close ()=0
 
virtual bool sql_select (const char *sql, db_rows *result=NULL)=0
 
virtual bool sql_update (const char *sql)=0
 
virtual bool begin_transaction ()
 
virtual bool commit ()
 
virtual bool rollback ()
 
bool exec_select (query &query, db_rows *result=NULL)
 
bool exec_update (query &query)
 
virtual stringescape_string (const char *in, size_t len, string &out)
 
virtual int affect_count () const =0
 
const db_rowsget_result () const
 
const std::vector< const db_row * > * get_rows (const char *name, const char *value)
 
const std::vector< db_row * > * get_rows () const
 
const db_rowget_first_row () const
 
void free_result ()
 
const db_rowoperator[] (size_t idx) const
 
size_t length () const
 
bool empty () const
 
void print_out (size_t max=0) const
 
db_handleset_id (const char *id)
 
const char * get_id () const
 
db_handleset_when (time_t now)
 
time_t get_when () const
 
- Public 成员函数 继承自 acl::connect_client
 connect_client (void)
 
virtual ~connect_client ()
 
time_t get_when ()
 
void set_when (time_t when)
 
connect_poolget_pool () const
 
virtual void set_timeout (int conn_timeout, int rw_timeout)
 

静态 Public 成员函数

static void set_loadpath (const char *path)
 
static const char * get_loadpath ()
 

Protected 属性

db_rowsresult_
 
char * id_
 
time_t when_
 
- Protected 属性 继承自 acl::connect_client
int conn_timeout_
 
int rw_timeout_
 
time_t when_
 
connect_poolpool_
 

额外继承的成员函数

- Protected 成员函数 继承自 acl::connect_client
void set_pool (connect_pool *pool)
 
- Protected 成员函数 继承自 acl::acl::noncopyable
 noncopyable ()
 
 ~noncopyable ()
 

详细描述

数据库操作句柄对象类型

在文件 db_handle.hpp254 行定义.

构造及析构函数说明

◆ db_handle()

acl::db_handle::db_handle ( void  )

◆ ~db_handle()

virtual acl::db_handle::~db_handle ( void  )
virtual

成员函数说明

◆ affect_count()

virtual int acl::db_handle::affect_count ( ) const
pure virtual

上次 sql 操作影响的记录行数

返回
{int} 影响的行数,-1 表示出错

acl::db_sqlite, acl::db_mysql , 以及 acl::db_pgsql 内被实现.

◆ begin_transaction()

virtual bool acl::db_handle::begin_transaction ( void  )
inlinevirtual

开始执行事务

返回
{bool}

acl::db_sqlite, acl::db_mysql , 以及 acl::db_pgsql 重载.

在文件 db_handle.hpp341 行定义.

341 { return false; }

◆ close()

virtual bool acl::db_handle::close ( )
pure virtual

纯虚接口,子类必须实现此接口用于关闭数据库

返回
{bool} 关闭是否成功

acl::db_sqlite, acl::db_mysql , 以及 acl::db_pgsql 内被实现.

◆ commit()

virtual bool acl::db_handle::commit ( void  )
inlinevirtual

提交事务

返回
{bool}

acl::db_sqlite, acl::db_mysql , 以及 acl::db_pgsql 重载.

在文件 db_handle.hpp347 行定义.

347 { return false; }

◆ dbopen()

virtual bool acl::db_handle::dbopen ( const char *  charset = NULL)
pure virtual

纯虚接口,子类必须实现此接口用于打开数据库

参数
charset{const char*} 打开数据库连接时采用的字符集
返回
{bool} 打开是否成功

acl::db_sqlite, acl::db_mysql , 以及 acl::db_pgsql 内被实现.

◆ dbtype()

virtual const char* acl::db_handle::dbtype ( ) const
pure virtual

返回数据库的类型描述

返回
{const char*}

acl::db_sqlite, acl::db_mysql , 以及 acl::db_pgsql 内被实现.

◆ empty()

bool acl::db_handle::empty ( ) const

查询(sql_select)执行完后结果是否为空

返回
{bool} 返回 true 表示查询结果为空

◆ escape_string()

virtual string& acl::db_handle::escape_string ( const char *  in,
size_t  len,
string out 
)
virtual

虚接口,为防止 sql 注入,用户应针对字符串字段调用此函数将一些特殊 字符进行转义,该接口对常见的特殊字符进行了转义,子类也可以实现自己 的转义方法

参数
in{const char*} 输入字符串
len{size_t} 字符串长度
out{string&} 存储转换结果
返回
{string&} 子类应该返回输入的缓冲区的引用,以便于用户在拼接 SQL 的时候比较方便

◆ exec_select()

bool acl::db_handle::exec_select ( query query,
db_rows result = NULL 
)

更安全易用的查询过程,调用此函数功能等同于 sql_select,只是查询 对象 query 构建的 sql 语句是安全的,可以防止 sql 注入,该方法 执行 SELECT SQL 语句

参数
query{query&}
result{db_rows*} 如果非空,则将查询结果填充进该结果对象中, 否则,会引用 db_handle 内部的一个临时存储对象
返回
{bool} 执行是否成功

◆ exec_update()

bool acl::db_handle::exec_update ( query query)

更安全易用的更新过程,调用此函数功能等同于 sql_update,只是查询 对象 query 构建的 sql 语句是安全的,可以防止 sql 注入,该方法 执行 INSERT/UPDATE/DELETE SQL 语句

参数
query{query&}
返回
{bool} 执行是否成功

◆ free_result()

void acl::db_handle::free_result ( )

释放上次查询的结果,当查询完成后,调用该函数来释放上次查询的结果,该函数被 多次调用并无害处,因为当第一次调用时会自动将内部变量 result_ 置空, 另外,要求子类必须在每次执行 SQL 查询前先调用此方法,以免用户忘记 调用而造成内存泄露;此外,本类对象在析构时会自动再调用本方法释放可能 未释放的内存

◆ get_errno()

virtual int acl::db_handle::get_errno ( void  ) const
inlinevirtual

获得上次数据库操作的出错错误号

返回
{int}

acl::db_sqlite, acl::db_mysql , 以及 acl::db_pgsql 重载.

在文件 db_handle.hpp280 行定义.

281  {
282  return -1;
283  }

◆ get_error()

virtual const char* acl::db_handle::get_error ( void  ) const
inlinevirtual

获得上次数据库操作的出错错描述

返回
{const char*}

acl::db_sqlite, acl::db_mysql , 以及 acl::db_pgsql 重载.

在文件 db_handle.hpp289 行定义.

290  {
291  return "unkonwn error";
292  }

◆ get_first_row()

const db_row* acl::db_handle::get_first_row ( ) const

获得执行 SQL 语句后的第一行结果,针对唯一键的数据查询比较方便

返回
{const db_row*} 返回空表示查询结果为空,否则, 则必须调用 free_result() 函数来释放中间的结果内存,否则会引起内存泄露

◆ get_id()

const char* acl::db_handle::get_id ( ) const
inline

获得本实例的唯一 ID

返回
{const char*} 为空时,表示未曾设置过唯一ID

在文件 db_handle.hpp474 行定义.

475  {
476  return id_;
477  }

◆ get_loadpath()

static const char* acl::db_handle::get_loadpath ( )
static

当设置了动态库的动态加载全路径时,可以通过本函数获得动态库加载全路径

返回
{const char*} 当未设置时则返回 NULL

◆ get_result()

const db_rows* acl::db_handle::get_result ( ) const

获得执行 SQL 语句后的结果

返回
{const db_rows*},返回结果若非空,则用完后需要调用 free_result() 以释放结果对象

◆ get_rows() [1/2]

const std::vector<const db_row*>* acl::db_handle::get_rows ( const char *  name,
const char *  value 
)

从查询的行记录集合中根据表字段名对应的字段值取出结果记录集合

参数
name{const char*} 数据表字段名(不区分大小写)
value{const char*} 数据表字段值(区分大小写)
返回
{const std::vector<const db_row*>*} 返回行记录集合类型对象, 若返回结果集非空,则必须调用 free_result() 以释放结果对象

◆ get_rows() [2/2]

const std::vector<db_row*>* acl::db_handle::get_rows ( ) const

取得所有的查询结果集

返回
{const std::vector<db_row*>*} 返回行记录集合类型对象, 若返回结果集非空,则必须调用 free_result() 以释放结果对象

◆ get_when()

time_t acl::db_handle::get_when ( ) const
inline

获得该连接句柄上次被使用的时间

返回
{time_t}

在文件 db_handle.hpp490 行定义.

491  {
492  return when_;
493  }

◆ is_opened()

virtual bool acl::db_handle::is_opened ( ) const
pure virtual

数据库是否已经打开了

返回
{bool} 返回 true 表明数据库已经打开了

acl::db_sqlite, acl::db_mysql , 以及 acl::db_pgsql 内被实现.

◆ length()

size_t acl::db_handle::length ( ) const

取得查询(sql_select)结果的行记录数

返回
{size_t} 结果行记录数,若为 0 则表示结果为空

◆ open()

bool acl::db_handle::open ( )
virtual

基类 connect_client 虚函数的实现

返回
{bool} 打开数据库连接是否成功

实现了 acl::connect_client.

◆ operator[]()

const db_row* acl::db_handle::operator[] ( size_t  idx) const

获得某个对应下标值的行记录

参数
idx{size_t} 下标值,必须小于查询结果的总数
返回
{const db_row*} 结果,如果为空,则有可能是下标越界, 也有可能是结果为空

◆ print_out()

void acl::db_handle::print_out ( size_t  max = 0) const

输出数据库查询结果

参数
max{size_t} 输出至屏幕的行记录数的最大值限制,如果该值为 0 则输出所有的结果集

◆ rollback()

virtual bool acl::db_handle::rollback ( void  )
inlinevirtual

事务回滚

返回
{bool}

acl::db_mysql , 以及 acl::db_pgsql 重载.

在文件 db_handle.hpp353 行定义.

353 { return false; }

◆ set_id()

db_handle& acl::db_handle::set_id ( const char *  id)

设置本实例的唯一 ID

参数
id{const char*} 唯一 ID
返回
{db_handle&}

◆ set_loadpath()

static void acl::db_handle::set_loadpath ( const char *  path)
static

当采用动态加载方式加载动态库时,可以使用此函数设置动态库的加载全路径

◆ set_when()

db_handle& acl::db_handle::set_when ( time_t  now)

设置本数据库连接句柄当前被使用的时间

参数
now{time_t}
返回
{db_handle&}

◆ sql_select()

virtual bool acl::db_handle::sql_select ( const char *  sql,
db_rows result = NULL 
)
pure virtual

纯虚接口,子类必须实现此接口用于执行 SELECT SQL 语句

参数
sql{const char*} 标准的 SQL 语句,非空,并且一定得要注意该 SQL 语句必须经过转义处理,以防止 SQL 注入攻击
result{db_rows*} 如果非空,则将查询结果填充进该结果对象中, 否则,会引用 db_handle 内部的一个临时存储对象
返回
{bool} 执行是否成功

acl::db_sqlite, acl::db_mysql , 以及 acl::db_pgsql 内被实现.

◆ sql_update()

virtual bool acl::db_handle::sql_update ( const char *  sql)
pure virtual

纯虚接口,子类必须实现此接口用于执行 INSERT/UPDATE/DELETE SQL 语句

参数
sql{const char*} 标准的 SQL 语句,非空,并且一定得要注意该 SQL 语句必须经过转义处理,以防止 SQL 注入攻击
返回
{bool} 执行是否成功

acl::db_sqlite, acl::db_mysql , 以及 acl::db_pgsql 内被实现.

◆ tbl_exists()

virtual bool acl::db_handle::tbl_exists ( const char *  tbl_name)
pure virtual

纯虚接口,子类必须实现此接口用于判断数据表是否存在

返回
{bool} 是否存在

acl::db_sqlite, acl::db_mysql , 以及 acl::db_pgsql 内被实现.

类成员变量说明

◆ id_

char* acl::db_handle::id_
protected

在文件 db_handle.hpp511 行定义.

◆ result_

db_rows* acl::db_handle::result_
protected

在文件 db_handle.hpp508 行定义.

◆ when_

time_t acl::db_handle::when_
protected

在文件 db_handle.hpp514 行定义.


该类的文档由以下文件生成: