使用 MySQL > 5 和 QSqlQuery 将值绑定到存储过程?



我只想从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

不正确

文档会说:

mySQL 5在SQL级别引入存储过程支持,但没有API 控制,输入和INOUT参数。因此,参数必须 使用sql命令而不是qsqlquery :: bindvalue((。

设置并读取

我们如何通过Q1设法完成工作?

我正在使用Qt5.8 MySQL 8.0.17 MySQL Connector C 6.1

使用pyqt5有两种调用pyqt5中存储过程的方法工作。我想即使我没有尝试过,这些也会在QT中起作用。

q.exec("CALL get_patient_info-brief ({})".format(1)

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

两个对我来说都很好。我知道使用位置时使用命名的占位符占位符,这是可取的。

相关内容

  • 没有找到相关文章

最新更新