2014-10-19 77 views
0

我想调用一个使用Qt的MySQL服务器存储过程。该过程返回我想要检索的多行数据。使用绑定调用服务器存储过程

的第一个片段我试过能正常工作:

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

它还返回所需的数据和query.first()像预期的是真实的。

然后我尝试使用参数绑定插入参数,如Qt文档提出的。我尝试了以下片段。第一个使用索引占位符第二个关键字占位符。

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,所以我不知道如何得到结果。

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

+0

http://qt-project.org/doc/qt-4.8/sql-driver.html#qmysql - 似乎是MySQL驱动程序/ API中的限制。 – Mat 2014-10-19 09:03:49

+0

链接文本显示IN,OUT和INOUT参数。但我不使用OUT或INOUT参数。我想检索查询结果记录。我没有尝试使用OUT参数,但是如果链接的文本是正确的,那也会失败。 – Silicomancer 2014-10-19 09:50:09

+0

你正在使用'IN'参数,你不是吗? – Mat 2014-10-19 09:50:42

回答

0

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

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

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

因此,显然在Qt/MySQL中绑定参数是相当无用的。关于批量模式,另请参阅this

相关问题