基于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
相关产品推荐
相关产品推荐

