使用prepare和bindValue对列名Sqlite查询


void updateDB(const int id, const QString& column, const QVariant& value) const 
 //*****
 //all stuff on open DB etc. 
QSqlQuery query;
query.prepare("UPDATE table SET  :column = :value WHERE id = :id ");
query.bindValue(":column", QVariant(column));   
query.bindValue(":value", value);
query.bindValue(":id", id);
query.exec();

是行不通的。同时,如果我将查询重写为

query.exec("UPDATE table SET " + column + " = " + value.toString() + " WHERE id = " + QString::number(id));

它的工作原理。如果我删除:列占位符并写入查询列名,它也可以工作,我正在对此进行测试。因此,我似乎不能使用bindValue和占位符列名,至少与Sqlite。但我没有在任何文档中找到这一点。

所以没有办法使用bindValue和占位符列名,或者我错过了什么?

正确的代码是:

query.prepare(QString("UPDATE table SET %1 = :value WHERE id = :id ").arg(column));
query.bindValue(":value", value);

绑定值,而不是字段名。

注::在阅读整个问题之前回答。是的,你是对的-没有办法使用bindValues绑定列,不仅为sqlite,但为每个db。

相关内容

  • 没有找到相关文章

最新更新