我有一个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,我认为)。
感谢任何提示。