前一篇博客中介绍的是如何根据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