c++ - QSqlQuery 绑定(bind)值与 BindValues vs QString.arg() 是否存在性能差异?

标签 c++ database qt sqlite

我们正在与同事讨论 BindValueQString.arg() 数据库方面是否存在差异,但我们自己无法回答。

QString().arg()

QSqlQuery qry;
qry.prepare(QString("INSERT INTO employee (id, name, salary) VALUES (%1, 'Thad Beaumont', %2)").arg(1001).arg(65000));
qry.exec();

QSqlQuery::bindValue

QSqlQuery query;
query.prepare("INSERT INTO employee (id, name, salary) VALUES (:id, :name,:salary)");
query.bindValue(":id", 1001);
query.bindValue(":name", "Thad Beaumont");
query.bindValue(":salary", 65000);
query.exec();

它们之间有什么性能差异吗? BindValues 是否优于其他方法?

最佳答案

我认为您和您的同事将准备好的陈述弄错了。例如,使用它们的最著名目标之一是(尝试)避免 SQL 注入(inject),这就是为什么无论性能问题如何,您都应该始终使用参数并绑定(bind)它们。在这种情况下,使用 arg 没有意义:它不是参数绑定(bind)的替代品,您只是在构建 SQL 字符串。如果你 100% 确定参数被很好地过滤/转义/检查,你可以使用它,并用 exec 执行它, 没有理由使用准备好的语句。

关于c++ - QSqlQuery 绑定(bind)值与 BindValues vs QString.arg() 是否存在性能差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48499674/

相关文章:

c++ - 返回值和局部变量的区别

mysql - 内部查询以匹配来自另一个表的 'LIKE' 结果

python - pyqt : How to use a same function to set text of different qt widget?

c++ - qt creator 中有很多 undefined reference

python - 使用 pyqt4 在设计的 qtdesigner ui 中添加 TreeView

c++ - Opencv DMatch距离超出范围

c++ - C 和 C++ 中类型的互操作性

c++ - multilist数据结构在C++中的应用

database - 为微服务横向扩展/水平扩展数据库的最佳实践或设计

ManytoMany 字段中的 Django ForeignKey 显示为 None