C++封装SQLite实例<三>

本文介绍了在C++中如何封装SQLite查询,针对SQL选择条件动态获取记录。由于查询结果未知,不能简单使用数组存储,而是利用多个SQLite原生函数进行灵活管理。文章详细讲解了CppSQLite3Query类的实现,包括初始化、获取列名、检查数据类型以及不同数据类型的获取方法。
摘要由CSDN通过智能技术生成

前一篇博客中介绍的是如何根据sqlite3_get_table()函数来获取一张表的内容,就是一股脑的把表中的内容全部存储起来放在一个一维数组中,这当中的规则已经介绍过了。接下来讲的是如何根据一个SQL查询语句来挑选出合乎选择条件的记录,被挑选出的记录事先是不知道的。你不知道这个查询的结果中有几行更不知道每一行中具体的记录值是什么,所以没办法用给定行值和列值的方式来获取数据,所有之前的用数组存储表的方式就行不通了。想要灵活的管理一个查询返回的结果这就会复杂多了,用到的SQLite原生函数也很多。

这个CppSQLite3Query类中有四个字段,分别是

	sqlite3 *mpDB;
	sqlite3_stmt *mpStmt;
	bool mbEof;  //由于查询的结果需要一行一行的访问,所以设置一个bool值来表示是否达到最后一行的结尾
	int mnCols;  //表示这个查询结果的列数,行数是无法得知的
第一个参数:查询要连接的数据库

第二个参数:

** CAPI3REF: SQL Statement Object
** KEYWORDS: {prepared statement} {prepared statements}
**
** An instance of this object represents a single SQL statement.
** This object is variously known as a "prepared statement" or a
** "compiled SQL statement" or simply as a "statement".
**
** The life of a statement object goes something like this:
**
** <ol>
** <li> Create the object using [sqlite3_prepare_v2()] or a related
**      function.
** <li> Bind values to [host parameters] using the sqlite3_bind_*()
**      interfaces.
** <li> Run the SQL by calling [sqlite3_step()] one or more times.
** <li> Reset the statement using [sqlite3_reset()] then go back
**      to step 2.  Do this zero or more times.
** <li> Destroy the object using [sqlite3_finalize()].
** </ol>
是一个SQL语句对象,或是说一条原生的SQL查询语句select * from XXX;经过SQLite处理后就生成了一个sqlite3_stmt对象。以后就可以不用原生的语句来做查询,就直接使用这个sqlite3_stmt*就可以查询了,当查询结束后,要将sqlite3_stmt*指针对象释放掉。

释放函数sqlite3_finalize()和sqlite3_free();函数功能类似,只不过后者是释放sqlite3*对象的,而前者是释放sqlite3_stmt*对象的。

函数原型   SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt);
函数说明:

/*
** CAPI3REF: Destroy A Prepared Statement Object
**
** ^The sqlite3_finalize() function is call
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值