跳转到帖子
登录关注  
墨香年少

QSqlDatabase: QMYSQL driver not loaded 解决方案

已推荐帖子

在做一个Qt的项目的时候,需要本地存储一些数据,本来第一选择是sqlite的,但是我读取的时候,发现同样的sql,Qt读取的结果和navicat读取的结果不一样。

也没找到为什么不一样,研究再三没有找到原因,于是放弃了sqlite,转而使用mysql

结果提示我:“QSqlDatabase: QMYSQL driver not loaded”

首先打印出来支持的数据模块:

qDebug() << QSqlDatabase::drivers();

结果中并没有mysql,于是百度和谷歌都去搜索了下,谷歌还专门用英文去搜索了下,发现大部分的网站抄来抄去的解决方案是复制mysql下的dll到qt的对应的目录下,

我试了下,没有任何作用,错误提示依旧

于是再找,终于找到了一个网页的方案,并且测试成功了。

解决方案如下。

首先,Qt安装的时候需要选中源码,这样才会再Qt的目录下有src目录。我的Qt在D盘下面,所以我的src目录是:

D:\QT5\5.15.2\Src

打开下面这个目录:

D:\QT5\5.15.2\Src\qtbase\src\plugins\sqldrivers\mysql

类似如下:

1.png

 

双击:mysql.pro,Qt会自动打开这个项目。

编辑pro文件,编辑后的代码如下:

TARGET = qsqlmysql

HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp

#QMAKE_USE += mysql

OTHER_FILES += mysql.json

PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)


# mysql安装目录下的include文件夹
INCLUDEPATH += "D:/MySQL/55/include"

# mysql安装目录下的lib文件夹下的libmysql.lib文件
LIBS += "D:/MySQL/55/lib/libmysql.lib"

# 编译后的dll存放的位置
DESTDIR = "D:\QT5\5.15.2\MysqlDll"

2.png

 

3.png

 

然后编辑,然后去D:\QT5\5.15.2\MysqlDll看下

结果如下:

4.png

 

复制这个文件夹下所有的文件到:

D:\QT5\5.15.2\msvc2019\plugins\sqldrivers

5.png

 

我用的是msvc2019_32 所以拷贝到这个目录,如果你说64位,可能需要复制到:msvc2019_64,mingw的话就复制到:mingw81_32或者mingw81_64

 

重启Qt后,就没问题了。

下面是我的单例DB

#pragma execution_character_set("utf-8")
#include "db.h"

#include <QCoreApplication>
#include <QMutex>
#include <QDebug>
#include <QMessageBox>

Db::Db(QObject *parent) : QObject(parent)
{
    qDebug() << QSqlDatabase::drivers();

    db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");
    db.setUserName("root");
    db.setPassword("123456");
    db.setDatabaseName("disk");

    if (!db.open())
    {
        QString err = "Error: Failed to connect database.";
        QMessageBox msgBox;
        msgBox.setText(err);
        msgBox.exec();
    }
}

Db *Db::Instance()
{
    static QMutex mutex;
    static QScopedPointer<Db> inst;
    if (Q_UNLIKELY(!inst)) {
        mutex.lock();
        if (!inst) {
            inst.reset(new Db);
        }
        mutex.unlock();
    }
    return inst.data();
}

bool Db::isOpen()
{
    if (!db.open())//判断数据库是否打开
    {
        qDebug() << "db open faild! err:" << db.lastError();
        return false;
    }
    qDebug() << "数据库打开成功";
    return true;
}

void Db::query(QString sql)
{
    QSqlQuery sql_query;
    sql_query.exec(sql);
}

最后输出如下:

("QSQLITE", "QMARIADB", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")
数据库打开成功

-- 结束 --


目之所及,皆是回忆,心之所想,皆是过往

分享这篇帖子


链接帖子
分享到其他站点

主要原因还是数据库的dll版本不对造成的,参考网址:

https://blog.csdn.net/Lvcxiao/article/details/118631612
http://www.cppblog.com/jack-wang/archive/2021/10/15/217833.html

 


目之所及,皆是回忆,心之所想,皆是过往

分享这篇帖子


链接帖子
分享到其他站点

如果:QSqlDatabase::drivers()  结果里面有QMYSQL,但是依然提示:“QSqlDatabase: QMYSQL driver not loaded”

将你的MySQL的安装目录的lib文件夹下的libmysql.dll拷贝到你的Qt安装目录下的bin目录下

然后重启Qt


目之所及,皆是回忆,心之所想,皆是过往

分享这篇帖子


链接帖子
分享到其他站点

创建帐户或登录来提出意见

你需要成为会员才能提出意见

创建帐户

注册成为会员。只要几个简单步骤!

注册帐户

登录

已有帐户? 请登录。

现在登录
登录关注  

×
×
  • 创建新的...

重要信息

注册必须使用2-8个中文汉字作为账号