Я использую QMYSQL для подключения к локальной базе данных. Приложение работает по нескольким потокам. Каждый поток подключается к базе данных с использованием независимого подключения. Иногда Qt вызывает следующую ошибку при попытке подключения к базе данных. В чем проблема?
QMYSQL: Unable to allocate a MYSQL object
Обновление
Добавлен код, используемый для подключения. Этот объект перемещается в поток, имя соединения. critical
- это сигнал, излучаемый в главное окно, чтобы прекратить выполнение приложения после критической ошибки (показывая сообщение). log
- это сигнал, который испускается для регистрации ошибок в базе данных.
void ClientWorker::connect() {
m_database = QSqlDatabase::addDatabase("QMYSQL","wsc");
m_database.setHostName(m_host);
m_database.setDatabaseName(m_databaseName);
m_database.setPort(m_port);
m_database.setUserName(m_db_username);
m_database.setPassword(m_db_password);
if(!m_database.open()) {
QString error = "Unable to connect to database. Reason:\n";
error+= m_database.lastError().text();
log("Unable to connect to database! ", error, "ERROR" );
emit critical(tr("Database Error!"),error);
} else {
log("Connected to datbase successfully.", "", "NOTICE" );
}
Обновление 2
Я понял, что каждый раз, когда соединение выполняется из основного потока (без активных подключений в основном проходе), драйвер не загружается. Я просто добавил небольшой код фиктивного соединения в main()
, который немедленно соединяется и отключается (до того, как какой-либо поток подключится). Добавляя этот код, все работает нормально. Я не уверен, почему потоки не могут подключиться до подключения в основном потоке, но я думаю, что это похоже на ошибку. Надеюсь, что это помогает кому-то, Я занял 3 дня:/