QT连接Mysql数据库时出现”QSqlDatabase: QMYSQL driver not loaded”解决方法

一、出现问题的代码段

bool DbManager::OpenDatabases()
{
    qDebug() << "drivers" << QSqlDatabase::drivers();//显示本机已有的数据库驱动
    QString connectName ="QMYSQL";
    //确保多次打开不会重复添加
    if(QSqlDatabase::contains(connectName))
        m_db = QSqlDatabase::database(connectName);
    else
        m_db = QSqlDatabase::addDatabase("QMYSQL",connectName);
    //连接本地数据库
    m_db.setDatabaseName("mysql");//必须是已经存在的数据库名字
    m_db.setHostName("127.0.0.1");
    m_db.setPort(3306);
    m_db.setUserName("root");
    m_db.setPassword("123456");

    if(m_db.open())
    {
        m_bValid = true;
        CreateTables();
    }
    else
    {
        QSqlError err = m_db.lastError();
        qDebug() << err.text();
        LOG(ERROR)<<err.text().toStdString();
        m_db.close();
        m_bValid = false;
    }

    return m_bValid;
}

二、提示信息

上面提示信息中,表示本机已有QMYSQL驱动,查看QT文件中也确实有该驱动,但是仍然无法连接成功
(路径:D:QT5.9.3mingw53_32pluginssqldrivers)

三、准备重新编译Mysql驱动插件
编译插件需要用到两个源码包:
  (1)需要一个与MySQL连接的扩展包:mysql-connector-c-6.1.3-win32,资源下载链接为:https://dev.mysql.com/downloads/file/?id=450611

  (2)Qt的源码,在安装Qt的时候,可以选择安装资源来确保同时将Qt的源码也安装到自己的电脑上。

圈住的是编译之前的源码。

四、编译源码
1、在QT源码目录下打开powershell

2、使用qmake生成Makefile文件

3、在mysql.pro文件中加上如下语句,mysql连接扩展包所在的路径

4、使用mingw32-make编译该工程。

5、编译完成后,可以使用mingw32-make install完成插件的安装,也可以不用,手动复制插件到指定路径即可。编译完成后,将生成如下MySQL的驱动组件:

6、将qsqlmysql.dll(release版本)和qsqlmysqld.dll(debug版本)文件复制到QT相应目录下

7、进行测试,在QtCreator中编译运行自己写好的MySQL连接程序,出现如下错误

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7

8、此时分析报错,QMYSQL驱动已经存在,然而依然不能连接到MySQL数据库。于是将MySQL连接的扩展包:mysql-connector-c-6.1.3-win32中的lib文件夹下的libmysql.dll和libmysql.lib(libmysql.lib文件可以不要)文件复制到Qt构建套件路径D:QT5.9.3mingw53_32in下,如下图:

9、重新测试,出现如下报错'caching_sha2_password' cannot be loaded
1.打开MySQL的命令行,输入数据库密码

2.修改加密规则:ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
3.更新用户密码:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
4.刷新权限: FLUSH PRIVILEGES;
5.重置密码:ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'

重新测试,连接成功!

原文地址:https://www.cnblogs.com/man-bu/p/13293390.html