首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql++ (mysqlpp):如何在使用fetch_row通过UseQueryResult迭代之前获得结果中的行数

mysql++ (mysqlpp):如何在使用fetch_row通过UseQueryResult迭代之前获得结果中的行数
EN

Stack Overflow用户
提问于 2014-02-28 06:13:14
回答 1查看 1.3K关注 0票数 0

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

我的代码结构如下:

代码语言:javascript
复制
// ...
Query q = conn.query(queryString);
if(mysqlpp::UseQueryResult res = query.use()){
    // some code

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


   }
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-28 17:08:36

如果有人遇到这种情况:我引用用户手册的话

检索结果集的最直接方法是使用Query::store()。这将返回一个从std::StoreQueryResult派生的StoreQueryResult对象,使它成为一个随机访问的行容器。反过来,每个Row对象就像String对象的一个std::向量,结果集中的每个字段都有一个。因此,您可以将result[1][4]**.看作一个二维数组:只需简单地说,就可以得到第2行的第5个字段。还可以按字段名访问行元素,如:** result[2]["price"]**.**

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

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

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

代码语言:javascript
复制
START TRANSACTION;
BEGIN;

SELECT COUNT(*) FROM myTable;

SELECT * FROM myTable;

COMMIT;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22087618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档