开发项目我们难免会碰上使用数据库的需求,在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文件等会要用。
打开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")
构建成功
去项目的输出目录找到我们要的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也就是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上鼠标右键。
选择这个属性
在弹出的窗口上更改如下几项
点击确定保存修改
然后再次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
// #include
// #include
// #include
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