我有一个 Qt 应用程序在数据库查询期间冻结,因为同时在后台运行 SQL 转储(它发生在每晚备份期间)。MySQL DB 是一个 innoDB,由于性能问题无法更改为 MyISAM。
db 连接的伪代码是这样的,然后是锁定函数query.exec()
:
QSqlDatabase _db = QSqlDatabase::addDatabase(QT_DB_TYPE, _con);
_db.setConnectOptions("MYSQL_OPT_RECONNECT=1;");
_db.setHostName("127.0.0.1");
_db.setDatabaseName("qtapp_db");
_db.setUserName("qtuser");
_db.setPassword("xxx");
_db.setPort("90000");
bool ok = _db.open();
qDebug() << "DBG: ############# db status: isopen()"<< _db.isOpen() << ", is valid; " << _db.isValid();
QSqlQuery query(_db);
query.prepare("INSERT huge_table {...}");
query.exec()
我想在执行 INSERT 之前检测表 huge_table 是否已锁定。但是_db.isValid()
并_db.isOpen()
返回true(无论如何我应该在表本身上检查这个,而不是db,我认为)。
感谢您的任何提示。