Qt C++连接MySQL教程,解决QSqlDatabase:QMySQL driver not loaded


你要做的

  1. 首先确定好自己的Qt版本是32位还是64位,MySql是32位还是64位,防止后续操作出现问题,这里我Qt是32位,MySQL是64位,所以我去官网下载了对应版本号的32位的ZIP。https://downloads.mysql.com/archives/community/
    确定版本号

  2. 先找到qt源码里的mysql的源码,例如我的路径是Z:\QT\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql,双击打开mysql.pro,添加下面的三行代码:

	INCLUDEPATH += Z:\mysql-5.5.40-win32\include    # 添加你自己的mysql安装目录下的include文件夹
	LIBS += Z:\mysql-5.5.40-win32\lib\libmysql.lib    # 添加你的mysql安装目录下的lib文件夹下的libmysql.lib文件
	DESTDIR = ../mysql/mysqlDll    # 设置编译好的qmysql.dll放置的目录,不然你可能不知道会生成在哪。
  1. 点击qt左下角的小锤子构建,出现如下的两个错误:
	Cannot read Z:/qtsqldrivers-config.pri: No such file or directory
	Project ERROR: Library 'mysql' is not defined.
  1. 解决错误1:找到sqldrivers路径下,我的是Z:\QT\5.14.2\Src\qtbase\src\plugins\sqldrivers下的文件configure.pri,在qt的左侧栏里,双击qsqldriverbase.pri打开该文件,CTRL+/将第四行注释掉,然后添加include(./configure.pri),保存。configure.pri

  2. 解决错误2:Library ‘mysql’ is not defined,在qt左侧栏中双击打开mysql.pro,将第六行注释掉,即

    #QMAKE_USE += mysql
    

在这里插入图片描述
在这里插入图片描述
6. 点击左下角编译,完成后去上面设置的编译目录里找qsqlmysql.dllqsqlmysqld.dll,一个是release版,一个是debug版在这里插入图片描述
这里我只需要release版。

  1. 将生成这两个dll文件,复制到qt的编译器下的sqldrivers文件夹里,我的是:Z:\QT\5.14.2\mingw73_32\plugins\sqldrivers
  2. 将自己的MySQL安装目录下的lib文件夹下的libmysql.dll,复制到qt的编译器的bin目录下,我的是:Z:\QT\5.14.2\mingw73_32\bin
    MySQL安装目录
  3. 打开需要使用MySQL的Qt项目,在项目的pro文件里添加QT += sql在这里插入图片描述
  4. 注意,当编译项目生成可执行文件时,你除了需要windeployqt 程序名添加库文件外(参考这里),还需要拷贝libmysql.dll到exe文件所在目录,拷贝qsqlmysql.dll在exe文件目录下的sqldrivers文件夹中。
  5. 关于怎么用QtSql,可以参考这篇文章:C++与Qt实现MySQL数据库的增删
    这里给出示例代码
		db = QSqlDatabase::addDatabase("QMYSQL");
        db.setHostName("localhsot");
        db.setDatabaseName("tablename");
        db.setUserName("root");
        db.setPassword("abc123456!");
		db.setPassword("123456");
        ok=db.open();
        if (ok){
            std::cout<<"数据库连接成功";
        }else{
            std::cout<<"数据库连接失败";
        }
        if (ok){
        //增加一条数据
        QSqlQuery* query = new QSqlQuery(db);
        QString strCmd = QString("insert into compress(str1,str2,str3) values('%1','%2','%3')")
                .arg(Qstring1)
                .arg(Qstring2)
                .arg(QString::fromStdString(string1));
        query->prepare(strCmd);
        if (query->exec())
            {
                return true;
            }
            else
            {
                return false;
            }
    }else{
        return false;
    }
        db.close();
        

背景知识

  • Qt连接到mysql的过程:app->Qt的数据库插件->mysql动态库->mysql服务。
  • Qt的数据库插件位于Z:\QT\5.14.2\mingw73_32\plugins\sqldrivers * 其中Z:\QT是安装路径,5.14.2是库,mingw73_32是编译器,plugins插件,sqldrivers数据库驱动。
  • 其中的qsqlmysqld.dll(debug版本用) ,qsqlmysql.dll(release版本用).
  • mysql动态库位于Z:\mysql-5.5.40-win32(mysql安装路径)\lib下的libmysql.dll
  • 不同版本的mysql里面包含不同的libmysql.dll, 不同的libmysql.dll必须跟配套的qsqlmysqld.dllqsqlmysql.dll一起才能正常工作.
  • 找到libmysql.dll,用Qt去重新编译对应版本的qsqlmysqld.dll和qsqlmysql.dll,再放到对应的位置。

参考文章

最有用的:qt连接mysql报错:QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC…
其他:
https://blog.csdn.net/CatEatApple/article/details/52279168
https://blog.csdn.net/m15814478834/article/details/49902077


版权声明:本文为z759127503原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。