gpt4 book ai didi

c++ - 在 C++ Qt 中坚持使用 prepare() 和 bindvalue()

转载 作者:搜寻专家 更新时间:2023-10-30 23:50:24 24 4
gpt4 key购买 nike

我写了一个基于 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());

输出:

SELECT ID , Row , Col FROM sometable WHERE Row = ? AND Col = ?

而且我还使用了另一种建议的方式:

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());

输出:

SELECT ID , Row , Col FROM sometable WHERE Row = ? AND Col = ?

但是当我正常使用 exec() 时,它工作得很好并且会替换相应的值而不是“?”。

有什么解释吗?还是应该使用普通的 exec()?

最佳答案

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

关于c++ - 在 C++ Qt 中坚持使用 prepare() 和 bindvalue(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2080265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com