Qt | Windows下Mysql/Mariadb数据库驱动编译,解决"Driver not loaded"错误

问题

在使用Qt连接数据库时,出现Driver not loaded报错(这里以Mariadb数据库为例Mysql同理)
指定QMYSQL情况下报错

指定QMARIADB驱动情况下报错

出现原因分析

由于Qt Sql模块使用的是驱动程序插件与不同的数据库API进行通信,当缺少当前连接的数据库驱动插件时,就会报错"Driver not loaded"
在我们进行数据库连接时,会调用QSqlDatabase的addDataBase制定连接数据库的驱动

在Qt中制定数据库驱动后,Qt会动态加载数据库驱动插件,首先是查找安装目录下的plugins\sqldrivers文件夹,我使用的是minGw32编译器,所以实际查找的目录应该是
D:\Qt\5.15.2\mingw81_32\plugins\sqldrivers
Qt查找对应文件夹中是否存在指定的驱动,一般驱动插件的存储类型也是存在一定区别:
我使用的Qt版本为Qt5.15.2,这里以QSQLITE驱动为例(因为这个sqllite数据库驱动一般会包含在库目录中,不用再手动编译),首先介绍一下不同引用库对应的驱动文件格式:
● minGw:
○ qsqllite.dll ---发布版本(Realse)的数据库驱动
○ qsqllite.dll.debug ---调试版本(Debug)的数据库驱动
● msvc:
○ qsqllite.dll ---发布版本(Realse)的数据库驱动
○ qsqllited.dll ---调试版本(Debug)的数据库驱动

这里就需要注意自己使用的编译器/引用库是哪一个,对应的编译器生成的文件格式参考上面的内容。
使用minGw64一般引用库在Qt安装目录下的C:\Qt[Qt版本]\mingw81_64\lib,编译器在C:\Qt\Tools\mingw810_64目录下
使用msvc64一般引用库在Qt安装目录下的C:\Qt[Qt版本]\msvc2019_64\lib,编译器通常安装在 Visual Studio 的目录下

解决方案

驱动编译
这里以编译Mariadb数据库驱动为例。
首先找到Qt的数据库插件编译源代码目录,我的目录为:
D:\software\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers
接下来需要明确自己的目前使用的引用库及编译器,以及需要编译的数据库驱动,因为我们需要编译的是Mysql/Mariadb数据库,所以选择D:\software\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers\mysql目录下的pro文件,并用QtCreator打开,配置项目时,选择自己项目相同的编译器,我这里选择minGw64编译器配置项目

然后修改mysql.pro文件如下图

添加的头文件搜索路径和库文件路径:

头文件路径

INCLUDEPATH += "C:/Program Files/MariaDB 10.11/include/mysql/"

库文件路径

LIBS += -L"C:/Program Files/MariaDB 10.11/lib" -lmariadb
在release下进行构建,将会在构建目录下生成三个文件(构建目录是D:\software\Qt\5.15.2\mingw81_64\qtbase\src\plugins\sqldrivers\mysql):
然后将这 三个文件拷贝至D:\software\Qt\5.15.2\mingw81_64\qtbase\src\plugins\sqldrivers\plugins\sqldrivers(对应自己使用的编译器进行选择)

接下来再进行测试连接,即可连接成功。

编译数据库驱动后,使用windeployqt打包发布版本并在安装了MariaDb/Mysql环境下仍然报错“Driver not Load"解决方法

方法1:mariaDb/Mysql安装目录下的lib目录的环境变量
方法2:每次打包程序时手动复制动态库文件libmysql.dll和libmariadb.lib到exe程序同级目录中(动态库在mariaDb/Mysql安装目录下的lib目录下)

posted @ 2025-05-23 14:48  来一碗糖醋锦鲤  阅读(68)  评论(0)    收藏  举报