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

基于Qt 5.6的Qt Creator 4.1.0中,如何获取PostgreSQL插入返回的bookid?

获取PostgreSQL插入语句返回的bookid(Qt环境下)

嗨,刚好我之前在Qt里处理过一模一样的场景,其实步骤很简单——你已经用对了PostgreSQL的returning bookid语法,接下来只需要从QSqlQuery的结果集里把这个值读出来就行,具体操作如下:

  • 执行完exec()之后,一定要先调用que.next(),把查询结果的游标移到第一条(也是唯一一条)记录上,这步是关键,跳过的话直接取值会拿不到有效数据
  • 然后用value()方法获取bookid:可以用字段索引value(0)(因为returning只返回了一个字段),或者更直观的字段名value("bookid"),后者可读性更强

给你写个包含错误处理的完整示例代码:

QSqlQuery que;
// 执行插入语句
if (que.exec("insert into shelf(title) values('blah') returning bookid;")) {
    // 移动到结果行
    if (que.next()) {
        // 根据你的序列类型做转换,这里假设是整数类型
        int newBookId = que.value("bookid").toInt();
        // 如果是bigint类型,就改用toLongLong()
        // qint64 newBookId = que.value("bookid").toLongLong();
        qDebug() << "新插入书籍的ID是:" << newBookId;
    } else {
        qDebug() << "无法获取返回的bookid:结果集为空";
    }
} else {
    qDebug() << "插入操作失败:" << que.lastError().text();
}

原理其实很直白:PostgreSQL的returning子句会把插入后生成的bookid作为结果集返回,Qt的QSqlQuery需要先定位到结果行,才能读取对应的值,和你查询普通表数据的逻辑是一致的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:42:30