QtSql:绑定不会改变SQLite的查询

时间:2018-06-01 12:26:24

标签: c++ qt qt5 qtsql

我有以下代码,它应该将值绑定到prepare语句:

f = linspace(0, Fs/2, length(magnitude)/2)
plot(f, magnitude(1:half))

例如,如果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%",几乎就像忽略了绑定值一样。命名占位符也有同样的问题。

1 个答案:

答案 0 :(得分:1)

我在一个等效的例子中尝试了这个并且适当地测试了"准备"的结果。和" exec",它们都返回一个布尔值。我在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中的评论对此有些模糊:

&#34;如果在不支持占位符的DBMS上执行准备好的查询,则会模拟此查询的准备。原始查询中的占位符将替换为其绑定值以形成新查询。此函数返回修改后的查询。它主要用于调试目的。&#34;

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