提问人:Mark 提问时间:10/30/2023 最后编辑:Mark 更新时间:10/30/2023 访问量:38
在没有MYSQL_OPT_RECONNECT的情况下处理MySQL(MariaDB)数据库的重新连接
Handling reconnection of MySQL (MariaDB) database without MYSQL_OPT_RECONNECT
问:
目前我有这个代码:
Orders::Orders(QObject *parent) : QObject{parent}
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "orders");
db.setHostName("localhost");
db.setDatabaseName("database");
db.setUserName("user");
db.setPassword("password");
db.setConnectOptions("MYSQL_OPT_RECONNECT=TRUE;");
db.open();
_model = new QSqlTableModel(this, db);
_model->setTable("orders");
_model->setEditStrategy(QSqlTableModel::OnManualSubmit);
_model->select();
}
在 Ubuntu 22.10、Qt 6.4.0 和 MariaDB v15.1 上运行。 在运行时,我收到以下警告:
警告:MYSQL_OPT_RECONNECT 已弃用,并将在将来的版本中删除。
我在这里读到他们决定完全删除自动连接功能。 我还搜索了其他问题,比如这个和这个,但它们只关注警告本身。
我很好,我可以删除该选项,但我不明白我应该如何处理重新连接。
例如,这是我依赖于数据库访问的函数之一:
void Orders::setOrderState(QString machine, QString id, DbOrderStates state)
{
QSqlDatabase db = QSqlDatabase::database("orders");
QString sql = QString("UPDATE orders SET states_id=:state WHERE id=:id AND machine=:machine");
QSqlQuery query(db);
query.prepare(sql);
query.bindValue(":state", static_cast<int>(state));
query.bindValue(":id", id);
query.bindValue(":machine", machine);
query.exec();
}
当我执行这个函数时,我想确保数据库已连接。我该怎么办?我必须检查 的返回值,如果失败,我必须重新连接到阻止执行此函数的数据库?prepare()
我没有找到来自QSqlDatabase的信号,该信号告诉我连接何时断开。
此外,我了解到我不能使用,因为它只是在数据库已打开时返回,而不是在调用时连接仍处于打开状态。QSqlDatabase::isOpen()
答: 暂无答案
评论