qt MySQL驱动编译以及注意事项
开发项目我们难免会碰上使用数据库的需求,在qt项目中也是如此。在qt中提供了访问数据库的方法但是这是需要相关数据库的驱动的。我们可以尝试把qt当前支持的驱动打印出来。
qDebug() << QSqlDatabase::drivers();
这个打印结果不唯一,因为打印结果取决于当前环境的QtSQL驱动有哪些。笔者环境如下:
可以看见笔者当前环境下有QSQLITE, QODBC,QPSQL三个驱动。笔者用的Qt版本是Qt6.5.0。但是在实际开发中我们有可能会有需要其他数据库的需求,比如有个项目需要MySQL来当数据库。但是现在我们的Qt环境并不支持MySQL数据库。上面的打印结果就显而易见了。根本没QMySQL字样。接下来我们共同来解决Qt连接MySQL的问题。
Qt6.5.0它并不自带QMySQL的驱动,我们根据刚才打印出来的驱动信息结果也能得知此事。我们还可以在Qt安装目录进一步确认。首先确定你用的编译器是哪个,是mingw还是msvc(Qt Creater用的是mingw编译器,Visual Studio用的是msvc编译器)。
如果你用的是Qt Creator那么在计算机的资源管理器中按照如下路径去寻找。
Qt按装目录\Qt\6.5.0\mingw_64\plugins\sqldrivers
笔者把Qt安装在了D盘所以笔者的路径是D:\Qt\6.5.0\mingw_64\plugins\sqldrivers
如果你用的是Visual Studio那么在计算机的资源管理器中按照如下路径去寻找。
Qt按装目录\Qt\6.5.0\msvc2019_64\plugins\sqldrivers
笔者把Qt安装在了D盘所以笔者的路径是D:\Qt\6.5.0\msvc2019_64\plugins\sqldrivers
显然笔者的这两处都没有关于MySQL的任何文件。这也恰好证实了我们刚才的打印结果,目前开发环境确实没有MySQL驱动。
Qt6.5.0并没有给我们编译好的MySQL驱动,但是他给我们提供了MySQL驱动的代码,我们可以手动去编译MySQL的驱动。
首先我们需要下载MySQL驱动的源码。如果已经有了Qt源码的朋友可以忽略本步骤。打开Qt维护工具,推荐用CMD打开这样可以更换下载源。在有MaintenanceTool.exe工具的文件夹路径地址栏中输入cmd即可。如果提示权限不中足之类的错误可以尝试管理员身份运行CMD。或者使用终端也可以。笔者使用的是终端。
在打开后的CMD输入
MaintenanceTool.exe --mirror https://mirrors.tuna.tsinghua.edu.cn/qt/
–mirror 参数意思是更换下载源,后面跟着的是下载源
一些Qt下载源:
中国科学技术大学:http://mirrors.ustc.edu.cn/qtproject/
清华大学:https://mirrors.tuna.tsinghua.edu.cn/qt/
北京理工大学:http://mirror.bit.edu.cn/qtproject/
中国互联网络信息中心:http://mirror.bit.edu.cn/qtproject/
如果提示以下内容,请检查一下当前路径是否正确,是否有MaintenanceTool.exe工具。
'MaintenanceTool.exe' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
成功打开MaintenanceTool.exe工具登录账号后进入如下界面。
点击下一步,来到选择组件界面
点击Qt
展开Qt找到相应版本的Qt勾选Sources选项
然后点击下一步安装即可。(因为Qt Sources笔者已经安装过了所以笔者图上的下一步灰色无法点击)没有安装过Qt Sources的话勾选了Sources的话下一步就会亮起来,可以点击。
安装完源码之后就可以进行正式的MySQL编译工作了。
来到Qt安装目录寻找这个路径。Qt安装目录\Qt\6.5.0\Src。笔者的路径是D:\Qt\6.5.0\Src。
在此目录中找到qtbase文件夹。把它复制一份到你的工作目录(要保证你的路径中没有空格)。
复制好了
进入以下路径文件夹,当前路径\qtbase\src\plugins\sqldrivers,记住这里有一个CMakeList.txt文件等会要用。
适合MinGW的驱动
打开Qt Creator 点击打开项目
找到刚才打开过的有CMakeList.txt的文件夹,打开CMakeList.txt。
Qt Creater会自动加载项目。加载项目时Qt Creater会让你选择你的编译器,选择你想用的编译器(Qt Creator 选择MinGW编译器)然后目点击Configure Project
Qt Creator 会自动配置好项目
现在再打开Windows资源管理器找到MySQL的安装文件夹(没有安装的朋友可以先去安装一下MySQL)注意:如果你的编译器是64位的那么MySQL也必须是64位的版反之亦然。
如何判断自己的编译器是否是64位的?很简单打开编译器所在文件夹如果编译器文件夹写着64那么这个编译器就是64位的(自己动手改的不算)
显然笔者编译器是64位的那么笔者就要下载64位的MySQL。MySQL Installer 下载地址:https://dev.mysql.com/downloads/windows/installer/8.0.html
安装MySQL数据库的步骤显然超出了本文的涉及范围,故不做太多赘述了。各位可以自行寻找相关资料查看。
安装完MySQL后找到MySQL的安装路径并打开。能看见MySQL Sever的文件夹。
进入MySQL Server文件夹,可以看见include和lib文件夹,把这两个文件夹复制到你的工作目录(要保证你的路径中没有空格)
复制完闭
现在重新回到Qt Creator中展开项目从项目文件中找到.cmake.conf文件
打开.cmake.conf文件
文件中加上下面三句:
SET(FEATURE_sql_mysql ON)
SET(MySQL_INCLUDE_DIR "刚才复制的include文件夹路径/include")
SET(MySQL_LIBRARY "刚才复制的lib文件夹/lib/libmysql.lib")
例如笔者的是如下:
SET(FEATURE_sql_mysql ON)
SET(MySQL_INCLUDE_DIR "E:/WorkSpace/tmp/include")
SET(MySQL_LIBRARY "E:/WorkSpace/tmp/lib/libmysql.lib")
然后Ctrl+S进行保存。
之后再构建。
构建成功
去项目的输出目录找到我们要的dll文件。
项目输出目录在哪?
点击Qt Creator的项目
进入项目模式后就能看见输出目录了
输出目录中有个plugins文件夹点击打开
里面有个sqldrivers文件夹点击打开
里面有我们编译完毕的驱动文件
那么还有一个问题那就是驱动编译时需要Debug模式还是Release模式?
Debug模式的驱动带有调试信息
Release模式的没有调试信息而且编译器优化过代码。
这俩个是众所周知的事情了。所以软件开发中你可以使用Debug模式编译的驱动软件发布时替换成Release模式编译的驱动。如果嫌麻烦直接用Debug模式的驱动即可不必折腾。影响不大。还有一种模式就是Release with Debug Information顾名思义带调试信息的Release版本这个就是Debug版本和Release版本的折中。我个人更推荐用Release with Debug Information模式进行编译驱动。
现在我们已经有了MySQL驱动了,现在把驱动复制到编译器的驱动插件文件夹即可。
Qt安装目录\Qt\6.5.0\mingw_64\plugins\sqldrivers
笔者的是D:\Qt\6.5.0\mingw_64\plugins\sqldrivers
OK
现在我们去打印一下驱动瞧瞧
有MySQL驱动了。那我们连接一下MySQL数据库试试吧!
很遗憾还是没有成功连接,我们不是有驱动了吗?为什么还是不行?诶!还有一个很重的操作我们还没做,那就是把MySQL的lib和dll文件还没给编译器呢。我们先找到MySQL的lib和dll文件。来到MySQL安装目录走以下路径:MySQL安装目录\MySQL\MySQL Server 8.0\lib
笔者的是C:\Program Files\MySQL\MySQL Server 8.0\lib。打开lib文件夹找到libmysql.dll和libmysql.lib文件。把它们两个复制到编译器的bin目录。bin目录在哪?找到Qt安装文件夹走以下路径:Qt安装文件夹\Qt\6.5.0\mingw_64\bin。笔者的是这个D:\Qt\6.5.0\mingw_64\bin。
OK
拷贝完了,我们再尝试连接数据库吧。
连接成功!We Get It!
适合MSVC的驱动
现在我们来编译MSVC也就是Visual Studio适合用的Qt MySQL驱动。首先第一步还是处理源码,不过我们下载的源码并不是Visual Studio项目,我们得把下载的源码转换成Visual Studio的项目。届时我们需要一个工具来帮助我们。那就是CMake。首先下载CMake,官网在此:https://cmake.org/,下载安装。打开CMake(cmake-gui),如图所示。
配置基本参数
源码文件指的其实就是刚才用Qt Creator 打开的有CMakeList.txt文件的目录。也就是刚才在工作目录拷贝进去的qtbase文件夹内走下面的路径qtbase\src\plugins\sqldrivers能找到那个CMakeList.txt。我们目标源码文件夹其实就是sqldrivers。
这个是笔者的文件路径。
输出路径就是生成出来的文件存放的位置。可以根据自己的情况进行配置。路径名最好是全英文且没有空格。然后点击Configure按钮。
选择好自己使用的编译器类型和位数,笔者用的是Visual Studio 2022 x64。最后点击Finish。
运行一段时间后会报错。这是正常的,因为我们还有很多东西没有配置。点击OK继续配置。
搜索一下编译器参数是否正确。
显然Qt编译器参数都没有。那我们自己创建一个。点击Add Entry。
写上相关参数:
Name:CMAKE_PREFIX_PATH
Type:PATH
Value:你自己计算机里的Qt6 Msvc编译器路径。
笔者的如下图:
选择文件夹
写入参数
然后点击OK,搜索看看,显然我们创建成功了。
再次点击Configure。得到下面结果:
我们发现了一个问题那就是MySQL部分并没有开启。
那我们接下来,解决这个问题。
还记得我们前面的那三条命令吗?
SET(FEATURE_sql_mysql ON)
SET(MySQL_INCLUDE_DIR "E:/WorkSpace/tmp/include")
SET(MySQL_LIBRARY "E:/WorkSpace/tmp/lib/libmysql.lib")
我们这一步本质上其实就是在处理这几个命令。
首先我们搜索MySQL得到如下界面。
我们先处理SET(FEATURE_sql_mysql ON)命令,找到FEATURE_sql_mysql并勾选。
再处理命令
SET(MySQL_INCLUDE_DIR “E:/WorkSpace/tmp/include”)
找到MySQL_INCLUDE_DIR,填入我们的include文件夹路径。哪个文件夹?就是我们从MySQL安装位置复制的那两个文件夹。
原来的位置
拷贝出来的位置
填入路径
得到如下界面
还有一种情况那就是有些朋友可能没有MySQL_INCLUDE_DIR这个变量。那这个时候该怎么为呢?
点击Add Entry添加相关变量即可。
添加参数如下
Name:MySQL_INCLUDE_DIR
Type:PATH
Value:MySQL的include路径。也就是上面所说的从MySQL安装位置复制的那两个文件夹之一,include文件夹。
填写好后点击OK即可。
再处理命令
SET(MySQL_LIBRARY “E:/WorkSpace/tmp/lib/libmysql.lib”)
找到MySQL_LIBRARY和MySQL_LIBRARY_DEBUG,填入我们的lib文件夹路径。lib文件在我们从MySQL安装位置复制的那两个文件夹之一,lib文件夹内。首先我们找到那个文件夹。
点击进入找到libmysql.lib文件。
把路径填入MySQL_LIBRARY和MySQL_LIBRARY_DEBUG 变量中
如果没有MySQL_LIBRARY 和MySQL_LIBRARY_DEBUG变量那么也是手动创建即可路径参数就和我们上面说的一一样,如下图。
注意这次的参数Type是FILEPATH不是PATH
填写写完成
目前MySQL还没配置,我看下面的输出框就能显而易见了。 所以需要点击Configure。
运行结束后会显示MySQL为yes且没有任何报错了。
最后点击Generate即可输出生成结果。
配置完毕,生成完毕
现在我们去输出文件夹看看吧。
输出文件中多了很多文件,里面还有我们熟悉的Visual Studio的项目启动文件(.sln文件)
现在用Visual Studio打开项目文件。
现在我们需要配置一下编译参数。先决定一下编译方式。Debug还是Release?
我们这次用RelWithDebInfo模式也就是带调试信息系的Release模式。
然后在QMYSQLDriverPlugin上鼠标右键。
选择这个属性
在弹出的窗口上更改如下几项
这里给大家补个小课:介绍一下编译dll时,运行库多线程dll(/MD),多线程调试(/MTd),多线程(/MD),多线程DLL(/MDd)都分别代表什么,都有什么区别?
这四种编译选项代表不同的运行库和调试方式,其区别如下:
- 多线程DLL(/MD):使用动态链接的多线程C运行时库。使用此选项时,需要使用动态链接库(DLL)来提供运行时支持。适用于需要将DLL与其他模块共享并且多个模块使用相同的C运行时库的情况。
- 多线程调试(/MTd):使用静态链接的多线程C运行时库,并且启用调试支持。使用此选项时,会将C运行时库的代码直接链接到生成的可执行文件中,而不是使用DLL。适用于需要在调试时使用独立运行时库的情况。
- 多线程(/MD):使用动态链接的多线程C运行时库。与多线程DLL类似,但是不启用调试支持。适用于需要将DLL与其他模块共享但不需要调试支持的情况。
- 多线程DLL(/MDd):使用动态链接的多线程C运行时库,并且启用调试支持。与多线程DLL类似,但是用于调试目的。适用于需要将DLL与其他模块共享并在调试时使用运行时支持的情况。
总体来说,/MD选项适用于需要将DLL与其他模块共享,而/MT选项适用于不需要共享DLL且需要直接链接到可执行文件中。使用调试选项(/d)则可以启用或禁用调试支持。
点击确定保存修改
然后再次QMYSQLDriverPlugin上鼠标右键。
选择生成
生成成功,生成的文件路径编译器在输出框内标注好了,我们只需要按照它所说明的路径找到我们的驱动即可。
打开找到的驱动路径
驱动已经生成出来了。不过事情还没有结束,我们还需要生成Debug版本。重新回到Visual Studio。我们这次用Debug模式。
然后再次QMYSQLDriverPlugin上鼠标右键。
选择这个属性
在弹出的窗口上更改如下几项
点击确定保存修改
然后再次QMYSQLDriverPlugin上鼠标右键。
选择生成
生成成功,生成的文件路径编译器在输出框内标注好了,我们只需要按照它所说明的路径找到我们的驱动即可。
打开找到的驱动路径
驱动已经生成完毕了,下一步把它们复制进编译器驱动文件夹
Qt安装目录\Qt\6.5.0\msvc2019_64\plugins\sqldrivers
笔者的是D:\Qt\6.5.0\msvc2019_64\plugins\sqldrivers
OK
还有一个很重的操作我们还没做,那就是把MySQL的lib和dll文件还没给编译器呢。我们先找到MySQL的lib和dll文件。来到MySQL安装目录走以下路径:MySQL安装目录\MySQL\MySQL Server 8.0\lib
笔者的是C:\Program Files\MySQL\MySQL Server 8.0\lib。打开lib文件夹找到libmysql.dll和libmysql.lib文件。把它们两个复制到编译器的bin目录。bin目录在哪?找到Qt安装文件夹走以下路径:Qt安装文件夹\Qt\6.5.0\msvc2019_64\bin。笔者的是这个D:\Qt\6.5.0\msvc2019_64\bin。
OK
拷贝完了,我们再尝试连接数据库吧。
连接成功!We Get It Too!
本套教程到这里就结束了,完结撒花。
附带数据库连接测试代码
// 所需头文件
// #include <QSqlDatabase>
// #include <QMessageBox>
// #include <QDebug>
// #include <QSqlError>
qDebug() << QSqlDatabase::drivers(); // 打印支持的数据库驱动
QSqlDatabase dbTest = QSqlDatabase::addDatabase("QSQLITE");//增加驱动
// 临时数据库, 程序终止后会被自动销毁
dbTest.setDatabaseName("memorydb");
// 可以长期保存在db文件的数据库
dbTest.setDatabaseName("mysql.db");
if (dbTest.open()){
QMessageBox::information(this, "infor", "success");
}
else {
QMessageBox::information(this, "infor", "open failed");
qDebug()<< dbTest.lastError();
}
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");
db.setPort(3306);
db.setDatabaseName("ry"); // 数据库名
db.setUserName("root"); // 数据库登录用户名
db.setPassword("root"); // 数据库登录密码
bool ok = db.open();
if (ok){
QMessageBox::information(this, "MySQL_infor", "success");
}
else {
QMessageBox::information(this, "MySQL_infor", "open failed");
qDebug()<< db.lastError();
}
下面是给大家准备的驱动程序已编译版本下载链接。不想要自己编译的朋友可以直接下载已编译版本,直接就能拿过来就能用不需要经过繁琐的编译过程。本驱动资源完全免费无任何下载门槛。
资源截图
资源树状图
Qt6.5.0MySQL驱动已编译版本下载链接https://download.csdn.net/download/m0_52072919/87685025