如何通过mariadb-connector-cpp获取executeQuery返回ResultSet的行数?
MariaDB Connector/C++ 获取查询结果行数的方案
mariadb-connector-cpp 的 sql::ResultSet 默认没有直接返回总行数的API,因为默认结果集是流式加载的,不会一次性拉取所有数据。不过可以通过两种方式实现需求:
方案1:提前执行COUNT查询
先执行 SELECT COUNT(*) FROM table_name 获取总行数,再执行实际查询。但要注意两次查询之间数据可能发生变化,存在数据不一致的风险。
方案2:使用可滚动结果集
创建Statement时指定结果集类型为可滚动,这样可以移动到结果集末尾获取行数,再返回开头处理数据:
string query = "select ID,Name,Res from table_name"; // 创建支持滚动的Statement,参数指定结果集类型和并发模式 std::unique_ptr<sql::Statement> stmnt(conn->createStatement( sql::ResultSet::TYPE_SCROLL_INSENSITIVE, sql::ResultSet::CONCUR_READ_ONLY )); sql::ResultSet *res = stmnt->executeQuery(query); // 获取总行数 res->last(); // 移动到最后一行 int rowCount = res->getRow(); // 当前行号即为总行数 res->beforeFirst(); // 移回结果集开头,方便后续遍历 // 后续处理逻辑,比如根据rowCount执行操作 if (rowCount > 0) { while (res->next()) { // 读取ID、Name等字段 int id = res->getInt("ID"); string name = res->getString("Name"); } }
注意事项
使用可滚动结果集会将整个结果集加载到内存中,如果查询返回的数据量很大,会占用较多内存,需根据业务场景评估使用。
内容的提问来源于stack exchange,提问作者Rakesh
相关产品推荐
相关产品推荐

