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

如何通过QtSql获取PostgreSQL的command tag?

在QtSql中获取PostgreSQL的Command Tag及受影响行数
  • QtSql本身没有提供直接获取PostgreSQL command tag的跨数据库API,因为它是通用数据库抽象层,不会单独针对某款数据库的返回细节做暴露。

  • 关于你对numRowsAffected()的疑问:
    针对PostgreSQL驱动,这个方法返回的是实际被插入/更新的行数,和command tag里的数值完全一致。比如执行UPDATE时,若某行新值和旧值无变化,PostgreSQL不会将其计入更新行数,numRowsAffected()返回的就是真正被修改的数量,而非匹配到的行数。

  • 如果一定要直接获取command tag,可以通过QtSql的底层接口调用PostgreSQL原生API实现:

    1. 执行SQL语句后,从QSqlQuery获取对应的QSqlDriver,再通过handle()方法拿到PostgreSQL的原生连接指针PGconn*。
    2. 调用PostgreSQL的PQcmdStatus()函数获取command tag字符串。
    3. 解析字符串提取出行数即可。示例代码如下:
    QSqlQuery query;
    if (query.exec("INSERT INTO test_table (column) VALUES ('example')")) {
        // 获取PostgreSQL原生连接指针
        PGconn* nativeConn = static_cast<PGconn*>(query.driver()->handle().data());
        if (nativeConn) {
            const char* cmdTag = PQcmdStatus(nativeConn);
            QString tagString = QString::fromUtf8(cmdTag);
            QStringList tagParts = tagString.split(' ');
            if (tagParts.size() >= 2) {
                int actualAffectedRows = tagParts.last().toInt();
                // 这里可以使用实际受影响行数
            }
        }
    }
    

    注意:这种方式依赖PostgreSQL原生API,会丧失QtSql的跨数据库兼容性,仅适合确定只使用PostgreSQL的场景。

内容的提问来源于stack exchange,提问作者bugmenot123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:49:53