【问题标题】:Calling server stored procedure using binding使用绑定调用服务器存储过程
【发布时间】:2014-12-14 10:43:48
【问题描述】:

我正在尝试使用 Qt 调用 MySQL 服务器存储过程。该过程返回我要检索的多行数据。

我尝试的第一个 sn-p 工作正常:

QSqlQuery query("CALL GetOrderItems(323)", dataBase);
qDebug() << query.first();

它还返回所需的数据,并且query.first() 像预期的那样为真。

然后我尝试使用 Qt 文档建议的参数绑定插入参数。我尝试了以下 sn-ps。第一个使用索引占位符,第二个关键字占位符。

QSqlQuery query(dataBase);
qDebug() << query.prepare("CALL GetOrderItems(?)");
query.bindValue(0, 323);
qDebug() << query.exec();
qDebug() << query.first();

QSqlQuery query(dataBase);
qDebug() << query.prepare("CALL GetOrderItems(:myparam)");
query.bindValue(":myparam", 323);
qDebug() << query.exec();
qDebug() << query.first();

这两个查询都执行得很好。但是query.first() 返回 false 所以我不知道如何得到结果。

我可以通过某种方式从绑定查询中获得结果吗?为什么这不起作用?

【问题讨论】:

  • qt-project.org/doc/qt-4.8/sql-driver.html#qmysql - 似乎是 MySQL 驱动程序/API 的限制。
  • 链接的文字说明了 IN、OUT 和 INOUT 参数。但我不使用 OUT 或 INOUT 参数。我想检索查询结果记录。我没有尝试使用 OUT 参数...但是如果链接的文本是正确的,那也会失败。
  • 你在使用IN参数,不是吗?
  • 是的,但我认为只有 OUT 和 INOUT 参数有问题。在所有查询执行无误后。
  • 引用你的话:“链接的文字说 IN、OUT 和 INOUT 参数。”

标签: mysql qt stored-procedures sqlbindparameter


【解决方案1】:

在Qt文档中可以找到两句话:

“MySQL 5 在 SQL 级别引入了存储过程支持,但没有用于控制 IN、OUT 和 INOUT 参数的 API。” (来自here,感谢 Mat)

“不完全支持使用 return 语句返回值或返回多个结果集的存储过程。” (来自here

显然,Qt/MySQL 中的绑定参数是毫无用处的。另请参阅 this 关于批处理模式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 2014-11-30
    • 2010-11-26
    相关资源
    最近更新 更多