微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么调用QSqlQuery::prepare函数后mysql中没有prepare语句

如何解决为什么调用QSqlQuery::prepare函数后mysql中没有prepare语句

这是我的测试代码


    //Get a database connection of type MysqL from my function.
    auto pdatabase = INDBPOOL->GetConnection();
    if (pdatabase == Q_NULLPTR)
        return;

    QString sql = "select * from task where task.taskId = ? and task.isDeleted = 0";

    //p_query is a member of class database connection. It's QsqlQuery class.
    bool ok = pdatabase->p_query->prepare(sql);
    if (!ok) {
        qDebug() << "prepare error!";
        return;
    }
    pdatabase->p_query->bindValue(0,1);
    pdatabase->p_query->exec();
    if (!pdatabase->p_query->isActive()) {
        qDebug() << "exec error";
    }

    pdatabase->p_query->exec("SELECT * FROM `performance_schema`.prepared_statements_instances");
    if (!pdatabase->p_query->isActive()) {
        qDebug() << "exec error";
    }

    while (pdatabase->p_query->next()) {
        qDebug() << pdatabase->p_query->value("sql_TEXT").toString();
        qDebug() << pdatabase->p_query->value("STATEMENT_NAME").toString();
        qDebug() << pdatabase->p_query->value("COUNT_EXECUTE").toInt();
    }

    INDBPOOL->ReleaseConnection(pdatabase);
    return;
}

我可以保证代码中所有的sql语句都运行成功,但是表performance_schema.prepared_statements_instances中没有数据。这意味着在我调用 QsqlQuery 类的函数 prepare 后,MysqL 数据库中没有准备好的语句。我的 Qt 版本是 5.12.9,MysqL 数据库版本是 8.0。 我不知道为什么。谁知道详情请告诉我。非常感谢!

解决方法

类 QSqlQuery 准备或执行一个语句,它将首先释放查询之前创建的准备好的语句。所以当我使用同一个数据库连接在表performance_schema.prepared_statements_instances中搜索prepared statement信息时,它已经被删除了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。