gpt4 book ai didi

c++ - QtSql:绑定(bind)不会更改 SQLite 的查询

转载 作者:行者123 更新时间:2023-11-28 04:39:05 24 4
gpt4 key购买 nike

我有以下代码应该将值绑定(bind)到 prepare 语句:

QSqlQuery query(db);
query.setForwardOnly(true);
query.prepare("SELECT Entry.* FROM Entry WHERE body LIKE ?;");
query.addBindValue(QVariant("%" + name + "%"));
query.exec();
tDebug("%s", query.executedQuery().toUtf8().data());

例如,如果 name"thing",那么查询应该执行语句 SELECT Entry.* FROM Entry WHERE body LIKE "%thing% ",但它执行 SELECT Entry.* FROM Entry WHERE body LIKE ?,几乎就像绑定(bind)值被忽略一样。命名占位符也有同样的问题。

最佳答案

我在等效示例中尝试了此操作,并适本地测试了“prepare”和“exec”的结果,它们都返回一个 bool 值。我测试了在 exec 之后这些值是有界的:

  QList<QVariant> list = query.boundValues().values();
for (int i = 0; i < list.size(); ++i)
qDebug() << i << ": " << list.at(i).toString();

我测试了我得到了预期的结果

  while (query.next())
qDebug()<<"result = "<<query.value(0);

确实,executedQuery 不包含有界值,但 Qt 中的注释对此有些含糊:

"如果一个带占位符的准备好的查询在不支持它的DBMS上执行,则模拟这个查询的准备。原始查询中的占位符被替换为它们的绑定(bind)值以形成一个新的查询。这个函数返回修改后的查询。它主要用于调试目的。”

所以我假设对于 postgresql(我拥有的)和 SQLite,executedQuery 确实返回带有占位符的原始数据,而不是有界值。

关于c++ - QtSql:绑定(bind)不会更改 SQLite 的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50643407/

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