• 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 '新密码'

    重新测试,连接成功!

  • 相关阅读:
    NetCore3.1,NetCore5.0让发布的时候可以展示views
    Mac配置Gradle环境变量
    [转] 聊聊OkHttp实现WebSocket细节,包括鉴权和长连接保活及其原理!
    spark hive 数据不一致 spark默认本地数据元 spark不能插入hive数据
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb8 in position 885: invalid start byte
    hadoop+zookeeper+yarn+spark高可用主从备份启动步骤
    Java笔记
    cnblogs设置
    IC Test Note
    复制文件夹下所有文件文件名
  • 原文地址:https://www.cnblogs.com/man-bu/p/13293390.html
Copyright © 2020-2023  润新知