QSqlQuery用prepare和bindValue作为列名Sqlite

Lit*_*ter 6 c++ sqlite qt qsqlquery

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();
Run Code Online (Sandbox Code Playgroud)

不行.同时如果我重写查询

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

有用.它也适用于我删除:列占位符并写入查询列名称,我正在测试它.所以我似乎不能将bindValue和占位符用于列名,至少使用Sqlite.但我没有在任何文件中找到这一点.

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

Ama*_*tel 15

这里的正确代码是:

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

绑定值,而不是字段名称.

PS:在阅读整个问题之前回答.是的,你是对的 - 没有办法使用bindValues来绑定列,不仅适用于sqlite,还适用于每个数据库.

  • 绑定值不是Qt的东西 - 它是SQL的东西.你可以在这里阅读它,例如:http://use-the-index-luke.com/sql/where-clause/bind-parameters.Quote:"绑定参数不能改变SQL语句的结构.这意味着您不能对表名或列名使用绑定参数." (3认同)