我编写了一个基于Qt助手的SQL查询,它说您可以使用prepare()方法而不是exec(),然后可以通过两个名为:
bindvalue()和addbindvalue()
下面是我的问题的代码片段:
Query->prepare("SELECT ID , Row , Col FROM sometable WHERE Row = :row AND Col = :col");
Query->bindValue(":row" , __Row);
Query->bindValue(":col" ,__Col);
Query->exec();
qDebug("%s" , Query->executedQuery().toStdString().c_str());产出:
选择ID,行,Col从sometable =?那科尔呢?
我还用了另一种建议的方法:
Query->prepare("SELECT ID , Row , Col FROM sometable WHERE Row = :row AND Col = :col");
Query->addBindValue(0 , __Row);
Query->addBindValue(1 ,__Col);
Query->exec();
qDebug("%s" , Query->executedQuery().toStdString().c_str());产出:
选择ID,行,Col从sometable =?那科尔呢?
但是当我正常使用exec()时,它工作得很好,它将替换相应的值,而不是"?“。
对此有什么解释吗?还是应该使用普通的exec()?
发布于 2010-01-17 08:05:40
执行()调用失败了吗?因为您所看到的可能是正常的,因为根据您使用的sql服务器,绑定可以由服务器(例如Oracle )完成。根据Qt,executedQuery:“在大多数情况下,此函数返回与lastQuery()相同的字符串。如果在不支持占位符的DBMS上执行准备好的查询,则模拟”。因此,我想,如果服务器支持绑定值,那么准备工作就不会被模拟,所以您只需要看到查询,而不会将占位符替换为实际值。
发布于 2010-01-17 08:17:20
这只是猜测,但我在http://qt.nokia.com/doc/4.6/qsqlquery.html上看到了以下内容:
警告:在创建QSqlQuery之前,必须加载QSqlQuery驱动程序并打开连接。此外,当查询存在时,连接必须保持打开状态;否则,QSqlQuery的行为是未定义的。
在你的情况下连接打开了吗?
发布于 2011-05-15 23:30:16
如果您想要使用准备好的语句构造查询,可以尝试这样做:
qDebug("%s" , Query.lastQuery().toStdString().c_str());https://stackoverflow.com/questions/2080265
复制相似问题