You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 16:12:03