zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

qt没有mysql驱动的解决办法

2023-04-18 14:26:58 时间

第一部分 qtcreator上没有mysql驱动的解决办法

第一步:找到你的qt的版本的源码src

在源码下找到你的mysql
我的在F:Qt5.14.1qt-everywhere-src-5.14.1qt-everywhere-src-5.14.1qtbasesrcpluginssqldriversmysql

你的mysql文件应该在…qtbasesrcpluginssqldriversmysql,前面的路径是你自己将他放在的位置,后边的应该一致

在这里插入图片描述


第二步,点击mysql.pro,电脑会自动打开qtcreater,然后就是进行编译器的选择,我选择的是:在这里插入图片描述

当你构建成功后,界面是这样的:
在这里插入图片描述


第三步:修改你的mysql.pro

在这里插入图片描述
具体内容:

TARGET = qsqlmysql

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

#QMAKE_USE += mysql


INCLUDEPATH += $$quote("C:Program FilesMySQLMySQL Server 8.0include")	#本机mysql的include目录
LIBS += -L$$quote("C:Program FilesMySQLMySQL Server 8.0lib") -lmysql	#本机mysql的lib目录
#注:当你去找的你电脑上的mysql路径时,你会发现大概率你的路径和我的路径是一致的,这应该和mysql的安装方式有关吧!

OTHER_FILES += mysql.json

PLUGIN_CLASS_NAME = QMYSQLDriverPlugin

#指定这个文件的绝对地址,具体这个路径的位置你可以看下图"qsqldriverbase.pri的路径"
include(F:Qt5.14.1qt-everywhere-src-5.14.1qt-everywhere-src-5.14.1qtbasesrcpluginssqldriversqsqldriverbase.pri)	



qsqldriverbase.pri的路径:其实很好找,就在mysql文件夹的上级目录中
在这里插入图片描述


第四步:然后再修改一下sqldriverbase.pri

在这里插入图片描述
具体内容:

QT  = core core-private sql-private

# For QMAKE_USE in the parent projects.
#include($$shadowed($$PWD)/qtsqldrivers-config.pri)

include(./configure.pri)

PLUGIN_TYPE = sqldrivers
load(qt_plugin)

DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII

第五步:构建项目

执行后,F盘下会出现plugins文件夹,进入F:pluginssqldrivers中,可以看到qsqlmysql.dll文件;

在这里插入图片描述

那么F:pluginssqldrivers怎么找呢?
我的qt环境装在F:
而F:plugins就生成在你的qt环境的同级目录 或者 qt环境的上级目录中
在这里插入图片描述

第六步:

将F:pluginssqldrivers目录下的qsqlmysql.dll文件复制到F:Qt5.14.1mingw73_64pluginssqldrivers
在这里插入图片描述

第七步:测试:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlDatabase>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QStringList list = QSqlDatabase::drivers();
    qDebug() << list;//打印支持的sql驱动
}

MainWindow::~MainWindow()
{
    delete ui;
}

我们发现,输出结果中出现了"QMYSQL", “QMYSQL3”,说明:大功告成!
在这里插入图片描述

注:我用的是mingw64位,mingw32位不可用,msvc2017_64也不可用

参考:

Qt缺少Mysq驱动QMYSQL driver not loaded
Windows环境下Qt缺少Mysql驱动的问题解决方案

第二部分 vs2019上没有mysql驱动的解决办法

接下来是讲:msvc2017_64没有mysql驱动怎么办?(与第一部分有少许不同)
在这里插入图片描述

第一步:找到源码:

如果你是做完第一部分,然后再做第二部分,那你就要把操作过的第一部分的源码删掉 ; 如果你是直接看的第二部分,那就不用删,找到你的源码即可
删除重新解压源码,源码的下载地址:qt源码下载

找到源码
在源码下找到你的mysql
我的在F:Qt5.14.1qt-everywhere-src-5.14.1qt-everywhere-src-5.14.1qtbasesrcpluginssqldriversmysql

你的mysql文件应该在…qtbasesrcpluginssqldriversmysql,前面的路径是你自己将他放在的位置,后边的应该一致
在这里插入图片描述


第二步,点击mysql.pro,电脑会自动打开qtcreater,然后就是进行编译器的选择,我选择的是:msvc2017编译器在这里插入图片描述


第三步:修改mysql.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的头文件路径
INCLUDEPATH += "C:Program FilesMySQLMySQL Server 8.0include"
#这是MySQL的库文件路径/
LIBS += "C:Program FilesMySQLMySQL Server 8.0liblibmysql.lib"

#为了方便查找,不妨增加一条语句,该语句用来指明编译后的结果输出的位置
#所以说,一会编译成功了,我要的文件就在F:Qt5.14.1qt-everywhere-src-5.14.1qt-everywhere-src-5.14.1qtbasesrcpluginssqldriversmysqlmysqllib里面
#你就直接写成一个你知道的路径,一会去那里找就行了(代号:1)
DESTDIR  = ../mysql/lib/

第四步:修改qsqldriverbase.pri

QT  = core core-private sql-private

# For QMAKE_USE in the parent projects.
#include($$shadowed($$PWD)/qtsqldrivers-config.pri)
include(./configure.pri)
PLUGIN_TYPE = sqldrivers
load(qt_plugin)

DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII

第五步:修改msvc-version.conf文件

文件路径:
F:Qt5.14.1msvc2017_64mkspecscommonmsvc-version.conf

在前面加一句QMAKE_MSC_VER = 1909(对应自己的编译器版本,里面会提示的,我是vs2017):
在这里插入图片描述


第六步:编译

编译成功之后,
找到F:Qt5.14.1qt-everywhere-src-5.14.1qt-everywhere-src-5.14.1qtbasesrcpluginssqldriversmysqlmysqllib
也就是刚才写的(代号:1)那个路径…/mysql/lib/
再说明一下吧,其实就是"我们正在构建的mysql这个项目"路径下的/mysql/lib/

打开如图:
在这里插入图片描述
在这里插入图片描述


第七步:

把qsqlmysql.dll和qsqlmysqld.dll复制到F:Qt5.14.1msvc2017_64pluginssqldrivers下,并且把mysql的lib目录下的libmysql.dll复制到F:Qt5.14.1msvc2017_64in下就可以运行了。


第八步:测试

#include "DBTest_msvc2017_64.h"
#include <QSqlDatabase>
#include <QDebug>

DBTest_msvc2017_64::DBTest_msvc2017_64(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    QStringList list = QSqlDatabase::drivers();
    qDebug() << list;//打印支持的sql驱动

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setDatabaseName("数据库名称");		// 数据库名称
    db.setHostName("主机名");			    // 主机名
    db.setUserName("数据库,用户名");		// 数据库,用户名
    db.setPassword("数据库,密码");		    // 数据库,密码
    db.setPort(3306);						// 数据库,端口
}

DBTest_msvc2017_64::~DBTest_msvc2017_64()
{}

ok!大工告成!
在这里插入图片描述


参考:

Qt连接MySQL数据驱动(绝对有效)
Qt缺少Mysq驱动QMYSQL driver not loaded