gpt4 book ai didi

c++ - 在 QSqlQuery::addBindValue() 中为 LIKE 转义 %(百分比)

转载 作者:行者123 更新时间:2023-11-30 03:55:06 25 4
gpt4 key购买 nike

我在 Qt 中使用 SQLite 数据库。我将值绑定(bind)到查询,而不是将它们传递到查询字符串中。但是,我无法弄清楚如何在绑定(bind)值本身中正确转义 %(百分比)。

例如,我如何更改此代码以使其输出 va%ue1,而不是 value1

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");
db.open();
QSqlQuery q(db);
q.exec("CREATE TABLE test (field1)");
q.exec("INSERT INTO test VALUES (\"value1\")");
q.exec("INSERT INTO test VALUES (\"va%ue1\")");
q.prepare("SELECT field1 FROM test WHERE field1 LIKE ?");
q.addBindValue("va%%%");
q.exec();
while (q.next()) {
qDebug() << q.value(0);
}

现在这两个输出:

QVariant(QString, "value1") 
QVariant(QString, "va%ue1")

我也尝试过 q.addBindValue("va\\%%");,但它根本没有输出任何东西。

最佳答案

LIKE 模式匹配在与参数绑定(bind)不同的级别上工作。

要转义“%”或“_”字符,您必须使用 ESCAPE clause :

q.prepare("SELECT field1 FROM test WHERE field1 LIKE ? ESCAPE '@'");
q.addBindValue("va@%%");

这是一个转义任何绑定(bind)值的函数:

QString sqlEscape(QString boundValue)
{
boundValue.replace('@', "@@");
boundValue.replace('_', "@_");
boundValue.replace('%', "@%");
}

关于c++ - 在 QSqlQuery::addBindValue() 中为 LIKE 转义 %(百分比),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29213989/

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