首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c++ Qt中使用prepare()和bindvalue()

在c++ Qt中使用prepare()和bindvalue()
EN

Stack Overflow用户
提问于 2010-01-17 07:13:45
回答 3查看 4.2K关注 0票数 2

我编写了一个基于Qt助手的SQL查询,它说您可以使用prepare()方法而不是exec(),然后可以通过两个名为:

bindvalue()addbindvalue()

下面是我的问题的代码片段:

代码语言:javascript
复制
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 =?那科尔呢?

我还用了另一种建议的方法:

代码语言:javascript
复制
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()?

EN

回答 3

Stack Overflow用户

发布于 2010-01-17 08:05:40

执行()调用失败了吗?因为您所看到的可能是正常的,因为根据您使用的sql服务器,绑定可以由服务器(例如Oracle )完成。根据Qt,executedQuery:“在大多数情况下,此函数返回与lastQuery()相同的字符串。如果在不支持占位符的DBMS上执行准备好的查询,则模拟”。因此,我想,如果服务器支持绑定值,那么准备工作就不会被模拟,所以您只需要看到查询,而不会将占位符替换为实际值。

票数 5
EN

Stack Overflow用户

发布于 2010-01-17 08:17:20

这只是猜测,但我在http://qt.nokia.com/doc/4.6/qsqlquery.html上看到了以下内容:

警告:在创建QSqlQuery之前,必须加载QSqlQuery驱动程序并打开连接。此外,当查询存在时,连接必须保持打开状态;否则,QSqlQuery的行为是未定义的。

在你的情况下连接打开了吗?

票数 3
EN

Stack Overflow用户

发布于 2011-05-15 23:30:16

如果您想要使用准备好的语句构造查询,可以尝试这样做:

代码语言:javascript
复制
qDebug("%s" , Query.lastQuery().toStdString().c_str());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2080265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档