在本节中,我将首先介绍MYSQL++中的查询的几个简单例子用法,然后看一下mysqlpp::Query中的几个与查询相关的方法原型(重点关注返回值),最后对几个关键类型进行解释。
1. MYSQL++的查询实例
下面的两个例子分别是STORE(所有数据一次性从服务器拉到本地缓存)和USE(将数据一条一条从服务器拉到本地)的使用方式,其中STORE内部实质就是mysql_store(
),而USE实质就是调用了mysql_use( )。
说明,下面的例子虽然使用的都是最为基本的查询过程(即没有使用template
sql或者SSQLS),但是这个并不影响我们的讨论,因为遍历结果集的过程是一致的。
STOREmysqlpp::Query query = conn.query("select item from stock");
mysqlpp::StoreQueryResult res = query.store();
mysqlpp::StoreQueryResult::const_iterator it;
for (it = res.begin(); it != res.end(); ++it)
{
mysqlpp::Row row = *it;
// 第一列 row[0]
// 第二列 row[1]
}
USEmysqlpp::Query query = conn.query("select * from stock");
mysqlpp::UseQueryResult res = query.use();
while (mysqlpp::Row row = res.fetch_row())
{
row["item"];
row["num"];
}
// Check for error:
// can‘t distinguish "end of results" and
// error cases in return from fetch_row() otherwise
if (conn.errnum())
{
cout << "Error in fetch_row";
}
从上面的两个例子中我们大致可以看出来,整个结果集的查询过程就是针对相匹配的Result类型,找到ROW,然后逐行或者跳跃着查找。
2.
Result相关类型的使用场合
首先让我们回顾mysqlpp::Query中提到的几个方法,以及他们的返回值。以下部分内容直接摘自关于mysqlpp::Query的介绍的内容。
为了讲述方便,我们先来看一下在result.h(Declares classes for holding information about SQL
query)中所定义的各种类型的关系。这几个类型后面会仔细说明。
<