如何使用本地变量作为MySQL查询的一部分(Qt c++)
How to use a local variable as part of a MySQL query (Qt C++)
正如问题所说,我试图使用where子句的本地变量查询MySQL
数据库。我知道在java中,您可以使用+
操作符在查询字符串中插入局部变量,这显然与C++
不一样。所以我想也许我可以使用字符串流:
void test::something(double car_id)
{
std::stringstream ss;
ss << "SELECT * FROM cars WHERE carID = '";
ss << car_id << "'";
QString query_string = QString::fromStdString(ss.str());
QSqlQuery query(query_string);
// execute the query
query.exec();
std::cout << query.value("carID").toString().toStdString() << std::endl;
}
但这也不工作,任何帮助将是伟大的,因为我似乎找不到答案
欢呼
您应该将查询参数化,而不是将变量附加到查询字符串中。像这样:
void test::something(double car_id){
QSqlQuery query;
query.prepare("SELECT * FROM cars WHERE carID = ?");
query.addBindValue(car_id);
query.exec();
std::cout << query.value("carID").toString().toStdString() << std::endl;
}
或带有命名绑定:
void test::something(double car_id){
QSqlQuery query;
query.prepare("SELECT * FROM cars WHERE carID = :car_id");
query.bindValue(":car_id", car_id);
query.exec();
std::cout << query.value("carID").toString().toStdString() << std::endl;
}
如果carID是DB中的数字列,则不需要引号
QString query_string = "SELECT * FROM cars WHERE carID = "
+ QString::number(car_id);
否则QString query_string = "SELECT * FROM cars WHERE carID = '"
+ QString::number(car_id) + "'";
注意1:您根本不应该使用这种方法,但是请查看绑定查询参数。由于很多不同的原因(注入、转义、类型格式化/转换等)
注释2:为什么人们喜欢把STL基本类型和QT基本类型(字符串、基本容器等)混在一起?除了完全不可读的代码和转换问题外,从来没有看到过这样做的任何好处。
相关文章:
- Qt VTK交互风格的信号到小部件
- QT在错误的班级中寻找空位
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 如何在Qt C++中更改光标
- 如何在MS Visual Studio 2019中运行QT UI
- QT通过C++添加映射QML项目
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用Qt C++计算类似Git的SHA1哈希
- Qt focusObjectChanged example?
- C++:如何使函数只返回作为列表一部分的字符串
- 如何在cpp文件之间切换窗口?在Qt中
- 如何在Qt TableView中将列的宽度调整为数据并将最后一部分拉伸在一起
- 我如何在QT中获得字符串的一部分
- 在Qt的QStringList中搜索QString的一部分
- Qt QString Remove的最后一部分是什么
- 如何使用QT显示图像的一部分
- 如何使用本地变量作为MySQL查询的一部分(Qt c++)