首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QtSql:绑定不会更改SQLite查询

QtSql:绑定不会更改SQLite查询
EN

Stack Overflow用户
提问于 2018-06-01 12:26:24
回答 1查看 276关注 0票数 1

我有以下代码,用于将值绑定到准备语句:

代码语言:javascript
复制
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 ?,就好像绑定值被忽略了一样。命名占位符也有同样的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-01 14:00:52

我在一个等价的例子中尝试了这一点,并对“准备”和"exec“的结果进行了适当的测试,这两个结果都返回一个布尔值。我测试了在exec之后,这些值是有界的,确定如下:

代码语言:javascript
复制
  QList<QVariant> list = query.boundValues().values();
  for (int i = 0; i < list.size(); ++i)
    qDebug() << i << ": " << list.at(i).toString();

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

代码语言:javascript
复制
  while (query.next())
    qDebug()<<"result = "<<query.value(0);

实际上,executedQuery没有包含有界的值,但是Qt中的注释在这方面有点模糊:

“如果在不支持占位符的DBMS上执行已准备好的占位符查询,则此查询的准备工作是将原始查询中的emulated.The占位符替换为它们的绑定值,以形成新的查询。此函数返回修改后的查询。它对调试非常有用。”

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50643407

复制
相关文章

相似问题

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