1

我有一个 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,我认为)。

感谢您的任何提示。

4

0 回答 0