0

mysql++是否提供了API调用来获取结果返回的行数?

我的代码结构如下:

// ...
Query q = conn.query(queryString);
if(mysqlpp::UseQueryResult res = query.use()){
    // some code

   while(mysqlpp::Row row = res.fetch_row()){


   }
}

如果一个函数返回结果的行数,我之前的问题很容易解决。我可以使用它来分配该大小的内存并在逐行迭代时填充。

4

1 回答 1

0

万一有人遇到这种情况:我引用用户手册

检索结果集最直接的方法是使用 Query::store()。这将返回一个 StoreQueryResult 对象,该对象派生自 std::vector,使其成为 Rows 的随机访问容器。反过来,每个 Row 对象就像一个 std::vector 的 String 对象,一个用于结果集中的每个字段。因此,您可以将 StoreQueryResult 视为一个二维数组:您可以通过简单地说 . 来获取第 2 行的第 5 个字段 result[1][4]。您还可以按字段名称访问行元素,如下所示:result[2]["price"].

处理查询结果的一种不太直接的方法是使用 Query::use(),它返回一个 UseQueryResult 对象。此类的作用类似于 STL 输入迭代器,而不是 std::vector:您遍历结果集,一次处理一行,始终向前。你无法在结果集中四处寻找,也无法知道该集中有多少结果,直到找到结尾。为了弥补这种不便,您可以获得更好的内存效率,因为不需要将整个结果集存储在 RAM 中。当您需要大型结果集时,这非常有用。

在这里找到一个建议:http : //lists.mysql.com/plusplus/9047

是使用 COUNT(*) 查询并获取该结果,然后再次使用 Query.use。为了避免计数不一致,可以将两个查询包装在一个事务中,如下所示:

START TRANSACTION;
BEGIN;

SELECT COUNT(*) FROM myTable;

SELECT * FROM myTable;

COMMIT;
于 2014-02-28T17:08:36.120 回答