下面是我的测试代码:
//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;
}我可以保证代码中的所有performance_schema语句都能成功运行,但是表SQL.SQL.prepared_statements_instances中没有数据。这意味着在我调用QSqlQuery类的prepare函数后,mysql数据库中没有准备好的语句。我的Qt版本是5.12.9,MySQL数据库版本是8.0。我也不知道原因。谁知道细节,请告诉我。非常感谢!
发布于 2021-01-30 10:01:28
类QSqlQuery准备或执行一条语句,它将首先释放查询先前创建的准备好的语句。因此,当我使用相同的数据库连接在表performance_schema.prepared_statements_instances,中搜索已准备好的语句info时,它已经被删除了。
https://stackoverflow.com/questions/65937551
复制相似问题