当你出现driver not loaded的时候,千万别被百度上大把大把的解决方案误导了……
Mysql driver not loaded
2019.01.16
首先必须庆祝一下;其次,要感谢帮助我的原同事。
来正题,我在华为云上开通了远程数据库,在本地通过qt连接。开始即出现Mysql driver not loaded。百度上一查,天呐,解决方案一堆,可以说挨个试了,答案是No。后来又Google,方法和百度类似,但也有不同的地方,也都试了,原本以为会OK,但和百度的效果一样。就这个,折腾了10几天,也低落了10几天。
我用的qt-5.12.0+msvc2017 32bit和64bit。一开始打算用32bit,考虑兼容性。当出现问题时,百度说因为使用的libmysql.dll与qt中的mysql驱动库不匹配,版本、位数不匹配。当然,位数肯定是确认过了,至于版本,那就按照百度的说法,自己编译了一把。具体编译方法可以百度。但问题依然,如下图所示。
在百般无奈之下,请教各路人马,不过都是原同事,有的电话或者即时聊天工具,也给说了一些,但无非都是百度上描述的问题。今天下午一个原同事,约的见面,但他在工作的时候已经在帮我试这个问题。后来,同事改写了数据库QSqlDatabase的创建方式。竟然好了。上代码……
我的代码如下:
QSqlDatabase *db; //在头文件中定义
db = new QSqlDatabase;
db->QSqlDatabase::addDatabase("QMYSQL");
db->setHostName(SQL_HOSTNAME);
db->setPort(SQL_PORT);
db->setDatabaseName(SQL_DBNAME);
db->setUserName(SQL_USERNAME);
db->setPassword(SQL_PASSWD);
if (!db->open()) {
qDebug("Sql connect failed.");
qDebug() << db->lastError().text();
QMessageBox::warning(nullptr, "警告", "无法连接数据库");
} else {
qDebug("Sql connected.");
}
我同事给我试的代码如下:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName(SQL_HOSTNAME);
db.setPort(SQL_PORT);
db.setDatabaseName(SQL_DBNAME);
db.setUserName(SQL_USERNAME);
db.setPassword(SQL_PASSWD);
if (!db.open()) {
qDebug("Sql connect failed.");
qDebug() << db.lastError().text();
QMessageBox::warning(nullptr, "警告", "无法连接数据库");
} else {
qDebug("Sql connected.");
}
不知道大家看出端倪否,就这个坑,看着不大,却让我在坑里摸爬滚打了10几天。至于原因,后面再查查吧,总之就是这个问题困扰10多天后得以解决。继续下一步吧……
最后想知道,这两种写法有什么区别?为什么会导致这个问题???