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



我有以下代码应该将值绑定到准备语句:

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

我在一个等效的例子中尝试了这个,并适当地测试了"prepare"和"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上执行带有占位符的准备好的查询,则会模拟此查询的准备。原始查询中的占位符将替换为其绑定值以形成新查询。此函数返回修改后的查询。它主要用于调试目的。

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

相关内容

  • 没有找到相关文章

最新更新