背景
今天尝试使用Qt打开sql文件,在调用QSqlDatabase::open()时,会报错:“driver not loaded”
原因实际上是mysql 的驱动 qsqlmysql.dll 没有成功加载。
所以本篇文章将详细介绍一下:Qt5.12.12如何构建64位QMYSQL数据库驱动。
执行
写在最前,以下出现的文件路径为我自己电脑安装的路径,可根据自己的路径对应修改。
步骤一 系统环境变量(非必须)
可以将Qt和MySQL的路径都加入到系统环境变量的path内
win10:【开始菜单】-->【控制面板】---->【系统和安全】-->【系统】---->【高级系统配置(左侧)】---->【环境变量】
win7:【计算机】---->【属性】---->【高级系统配置】---->【环境变量】
选中【系统变量】内的【Path】点击【编辑】,将对应路径添加进去
这是我的Qt和MySQL的安装路径,对应各位安装路径填入即可 。
步骤二 mysql.dll
将 C:\mysql-5.7.21-winx64\lib
路径下的 libmysql.dll 文件复制至G:\Qt\5_12\Qt5.12.12\5.12.12\mingw73_64\bin
步骤三 mysql.pro
使用Qt Creator打开G:\Qt\5_12\Qt5.12.12\5.12.12\Src\qtbase\src\plugins\sqldrivers\mysql路径下的mysql.pro
打开时会提示你使用什么编译,在这里我使用 MinGW64-bit 来编译,因为我MySQL安装的是64位的,所以使用64位的MinGW编译。
打开工程内的mysql.pro
将第六行的
QMAKE_USE += mysql
注释掉,修改为#QMAKE_USE += mysql
(前面加#)
同时在下方添加如下几行代码
win32:LIBS += -LC:/mysql-5.7.21-winx64/lib -llibmysql
INCLUDEPATH += C:/mysql-5.7.21-winx64/include
DEPENDPATH += C:/mysql-5.7.21-winx64/include
另外,为了方便找到构建后的dll文件,可以在最后添加一句,可将构建的文件放在myLib文件夹内
DESTDIR = ../mysql/myLib
打开 qsqldriverbase.pri
将第4行 include($$shadowed($$PWD)/qtsqldrivers-config.pri) 注释掉然后在下面加入一行include(./configure.pri)
步骤四 构建
构建当前工程,当编译完成后,在mysql.pro的根目录下会出现 myLib 文件夹,文件夹内会生成以下文件。
步骤五 导入驱动
将 qsqlmysql.dll 和 qsqlmysqld.dll 文件复制到G:\Qt\5_12\Qt5.12.12\5.12.12\mingw73_64\plugins\sqldrivers 。
至此,MYSQL的驱动编译就完成了
注意:
MySql的版本为要与编译器的版本为一致,比如我的MySql是64位的,我的编译器就需要使用MinGW73_64来编译mysql驱动,否则也会出问题。
测试
m_DB = QSqlDatabase::addDatabase("QMYSQL"); //添加MySql数据库
m_DB.setHostName("127.0.0.1");
m_DB.setPort(3306);
m_DB.setUserName("mylean");
m_DB.setPassword("123456");
if (!m_DB.open())
{
QMessageBox::warning(this, "错误", "打开数据库失败"+ m_DB.lastError().text(), QMessageBox::Ok, QMessageBox::NoButton);
return;
}
另外记得在.pro里面加入QT += sql