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

mysql++ (mysqlpp): how to get number of rows in result prior to iteration using fetch_row through UseQueryResult

本文关键字:row fetch 使用 UseQueryResult 获取 结果 mysqlpp 迭代 mysql++      更新时间:2023-10-16

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

我的代码结构如下:

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

}
}

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

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

检索结果集最直接的方法是使用Query::store()。这返回一个StoreQueryResult对象,它派生自std::vector,使其成为Rows的随机访问容器。反过来每个Row对象就像String对象的std::向量,结果集中的每个字段都有一个。因此,您可以将StoreQueryResult视为二维数组:只需简单地说CCD_ 1。您还可以按字段名称访问行元素,如以下所示: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;