背景
这两天没事看了眼boss直聘发现很多的公司还是要求要会MySQL,于是乎开始了我的踩坑之路!
我几乎翻遍了csdn上有关于“QSqlDatabase: QMYSQL driver not loaded问题”,但是跟着人家的步骤一步一步,我的仍然一直报“driver not loaded”,终于!!!历经三天连接成功了!
于是在此记录自己的踩坑经历,希望可以帮助到和我一样初学MySQL的同学。
环境
版本如下:
qt:5.15.2
MySQL:8.0.42
1、安装QT
这个网上教程特别多,我这里就不写了,建议大家采用在线安装方式(5.15好像也只能在线安装了),这样也方便后续添加组件或者按照别的版本。
注意:在线安装的速度比较慢,如果不采用镜像安装,可能会要等很久很久。。。
找到在线安装包位置,输入cmd打开控制台

--mirror https://mirrors.ustc.edu.cn/qtproject

然后回车就会显示出QT安装界面了, 选择自定义安装。
默认是不显示6.x之前的版本了,

别慌!在右上角显示那里勾选上Archive

点是,就会出现5.15.2了

这里需要注意的是 在安装时,一定要勾选上Sources选项,不然没有qt自带的编译MySQL驱动的mysql项目。
废话有点多。。。开始正题!
2、下载MySQL
去官网下载压缩包解压MySQL :: 下载 MySQL Community Server
https://dev.mysql.com/downloads/mysql/
下载我框起来的这个
我前边说历经三天终于连接成功了,前两天半都是用的下载的这个然后编译驱动,一直就是显示
QSqlDatabase: QMYSQL driver not loaded问题,真的是坑了我整整两天多的时间,哎!

下载zip压缩包那个几分钟就成功了!我感觉上边那个MSI安装包应该也是可以用的,但是不知道为啥一直报QSqlDatabase: QMYSQL driver not loaded,打印明明有QMYSQL的驱动,有大神路过的可以指点一下~

3、通过qt自带mysql.pro项目编译mysql驱动
这是我的路径,大家可以根据自己的安装路径去找,如果安装QT的时候没有勾选Soures选项,是没有Src文件夹的。

打开项目编译器可根据自己的需要选择,我选择的编译器为MinGW64。项目打开后,
(1)注释掉QMAKE_USE += mysql
(2)添加MySQL的头文件和库文件路径,这里是我的路径,大家需要根据自己的路径修改
(3)生成的目标库路径“DESTDIR”,可以不指定,会生成在你安装QT盘符下plugins/sqldrivers文件夹下(但是我并没有生成该文件夹所以指定了路径)
(4)需要修改qsqldriverbase.pri文件
把这句注释掉#include($$shadowed($$PWD)/qtsqldrivers-config.pri),不然会报找不到qtsqldrivers-config.pri的错
新增:include(./configure.pri)

(5)qmake,然后点击 构建,出现下方的库表示构建成功
mingw构建,目录下会生成qsqlmysql.dll、qsqlmysql.dll.debug,使用MSVC2019构建,则目录下会生成qsqlmysql.dll、qsqlmysqld.dll两个文件

4、把构建出来的库放到合适的位置
我这里的路径是:D:\QT\5.15.2\mingw81_64\plugins\sqldrivers下
如果是msvc,放到D:\QT\5.15.2\msvc2019_64\plugins\sqldrivers
然后将mysql-8.0.42-winx64 的lib和bin文件夹添加至系统环境变量中。

重启qt运行程序,下边附了测试代码
如果还是出现之前的问题,将mysql-8.0.42-winx64 bin文件夹下的libmysql.dll和libmysql.lib拷贝到D:\QT\5.15.2\mingw81_64\bin下重启qt运行程序
显示打开数据库成功

这样就成功啦!希望你们都可以成功连接MySQL。
5、测试代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlDatabase>
#include <QMessageBox>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setPort(3306);
db.setUserName("root");//你的账号
db.setPassword("123456"); //你的密码
db.setDatabaseName("test");//需要自己手动在MySQL中先创建一个数据库才可以
bool ok = db.open();
if(ok)
{
QMessageBox::information(this,"info","success");
}
else
{
QMessageBox::information(this,"info","open faied");
}
}
MainWindow::~MainWindow()
{
delete ui;
}



9105

被折叠的 条评论
为什么被折叠?



