我在Qt中使用SQLite数据库。我将值绑定到查询,而不是在查询字符串中传递它们。但是,我无法弄清楚如何正确地转义绑定值本身的%(百分比)。
例如,如何更改此代码,使其输出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\\%%");
,但它根本没有输出任何东西。
答案 0 :(得分:2)
LIKE模式匹配与参数绑定不同。
逃避&#39;%&#39;或者&#39; _&#39;字符,您必须使用ESCAPE clause:
q.prepare("SELECT field1 FROM test WHERE field1 LIKE ? ESCAPE '@'");
q.addBindValue("va@%%");
这是一个逃避任何绑定值的函数:
QString sqlEscape(QString boundValue)
{
boundValue.replace('@', "@@");
boundValue.replace('_', "@_");
boundValue.replace('%', "@%");
}