当你出现driver not loaded的时候,千万别被百度上大把大把的解决方案误导了……

时间:2019-01-18
本文章向大家介绍当你出现driver not loaded的时候,千万别被百度上大把大把的解决方案误导了……,主要包括当你出现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多天后得以解决。继续下一步吧……

 

最后想知道,这两种写法有什么区别?为什么会导致这个问题???