Qt QSqlQuery bindValue适用于?但不是:占位符

时间:2013-12-26 13:50:02

标签: c++ database qt sqlite qsqlquery

我正在使用SQLite,插入表中。 Folowwing

QSqlQuery testQuery(QString("INSERT INTO test(testcol) VALUES(?)"));
testQuery.bindValue(0, someQStringObg);
testQuery.exec();

有效,但

QSqlQuery testQuery(QString("INSERT INTO test(testcol) VALUES(:val)"));
testQuery.bindValue(":val", someQStringObg);
testQuery.exec();

别。 testQuery.lastError()。text()返回无查询无法获取行

不知道为什么会这样,但是真的想知道。

1 个答案:

答案 0 :(得分:10)

请使用prepare作为official example

QSqlQuery testQuery;
testQuery.prepare("INSERT INTO test(testcol) VALUES(:val)");
testQuery.bindValue(":val", someQStringObj);
testQuery.exec();

错误的原因是在绑定到相应的占位符之前执行了查询。您可以看到constructor documentation的相关部分:

  

如果查询不是空字符串,则会执行。