gpt4 book ai didi

mysql - 使用 MySQL > 5 和 QSqlQuery 将值绑定(bind)到存储过程?

转载 作者:行者123 更新时间:2023-11-29 15:44:20 25 4
gpt4 key购买 nike

我只想从 Qt 端运行此类程序:

DROP PROCEDURE IF EXISTS get_patient_info_brief;
DELIMITER //
CREATE PROCEDURE get_patient_info_brief(IN _id int)
BEGIN
SELECT age, height, weight, sessions, remaining_sessions, `description` FROM patient_info WHERE `id` = _id;
END //
DELIMITER ;

像这样:

const auto q1 = QString("CALL get_patient_info_brief(?);");
const auto q2 = QStringLiteral("SELECT age, height, weight, sessions, remaining_sessions, `description` FROM patient_info WHERE `id` = ?;");

auto db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("mydb");
db.setUserName("root");
db.setPassword("pswd");
if (db.open()) {
QSqlQuery q(db);
q.prepare(q2);
q.addBindValue(QVariant(1));
if (q.exec()) {
qDebug() << "query executed";
if (q.size()) {
while (q.next()) {
qDebug() << q.record();
}
}
}
}

如果我使用 q2,结果将返回,但 q1 则不然

Docs会说:

MySQL 5 introduces stored procedure support at the SQL level, but no API to control IN, OUT, and INOUT parameters. Therefore, parameters have to be set and read using SQL commands instead of QSqlQuery::bindValue().

我们怎样才能设法完成第一个问题的工作?

我使用的是Qt5.8 + MySQL 8.0.17 + MySQL Connector C 6.1

最佳答案

使用PyQt5有两种方法可以调用PyQt5中的存储过程,并且两者都可以工作。我想这些也可以在 Qt 中使用,尽管我还没有尝试过。

q.exec("调用 get_ Patient_info-brief ({})".format(1)

q.prepare("CALL get_patient_info-brief (:id)")
q.bindValue(":id", 1)
q.exec()

两者都对我来说效果很好。我明白当使用位置使用命名的占位符占位符是更好的选择。

关于mysql - 使用 MySQL > 5 和 QSqlQuery 将值绑定(bind)到存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57240776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com