欢迎来到军工软件开发人才培养基地——学到牛牛

Qt下Mysql驱动的编译添加

时间:2024-05-06 07:01:10 来源:学到牛牛

一、Qt数据库驱动默认添加使用情况简介

在Qt5.9以后的Qt版本中减少了默认数据驱动支持,比如mysql数据库的驱动(相应的插件库),Qt5.9以前的版本大多都是有的,无需进行驱动添加,直接参考该文档第三部分内容进行操作即可;其它没有对应驱动库的情况,我们就需要自己手动编译添加,具体操作参考本文第二部分内容。

Qt中默认可包含的数据库操作驱动类型有:

QPSQL :PostgreSQL Driver

QMYSQL :MySQL Driver

QOCI :Oracle Call Interface Driver

QODBC :ODBC Driver (includes Microsoft SQL Server)

QDB2 :IBM DB2

QTDS :Sybase Adaptive Server

QSQLITE :SQLite version 3 or above

QIBASE :Borland InterBase Driver

除了这些已有驱动类型还可以通过registerSqlDriver()注册定制的数据库驱动类型,然后动态加载其他第三方驱动程序。

虽然Qt默认包含的数据库操作驱动类型有上述的那些,但当在Qt5.9以后就减少了默认驱动的添加,而是只提供了对应的数据库操作接口源码,比如当我们在Qt5.15中我们调用QSqlDatabase::drivers()去查看我们当前QtCreator中包含的驱动时我们只能得到如下类型:

所以当我们想去添加使用mysql驱动时

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

就会出现如下错误:

这里就可以看到当前可用的驱动类型中是没有QMYSQL的,所以我们只能通过驱动源码自行编译添加插件库使用。

 

二、Qt中添加MYSQL驱动具体的操作步骤:

Qt中默认包含的数据库驱动源码路径:Qt安装目录\Src\qtbase\src\plugins\sqldrivers

如:D:\Qt\Qt5.15\5.15.2\Src\qtbase\src\plugins\sqldrivers

这里我们想添加的是mysql的驱动,所以我们就进入这下面的mysql目录

打开mysql驱动工程配置编译器套件

1.在mysql.pro工程文件中注释掉QMAKE_USE += mysql

2.在mysql.pro文件最后加上

INCLUDEPATH += $$quote(你的mysql安装目录/include/)

LIBS += $$quote(你的mysql安装目录/lib/libmysql.lib)

DESTDIR = ../mysql/mysqllib

如:

3.在qsqldriverbase.pri中注释原有的include($$shadowed($$PWD)/qtsqldrivers-config.pri)

重新添加修改为include(./configure.pri),因为在qsqldriverbase.pri所在目录下的配置文件是configure.pri而不是qtsqldrivers-config.pri

4.保存上述更改然后选择需要环境的编译器套件进行编译构建(若提供的mysql为32位则选择mingw32编译套件,提供的mysql为64位则选择mingw64编译套件,构建时可根据使用选择debug或release版),否则会由于库的位数不对应导致构建出错;在Qt5.15中构建成功后就会在mysql驱动工程目录下的mysqllib目录中出现以下文件

然后将生成的xxx.dll文件都拷贝至对应编译套件的数据库插件驱动目录下,方便后续该编译套件使用

注意:这里我们使用的是mingw编译套件编译的mysql.pro工程,生成的驱动库也只能供mingw编译套件使用,若想使用MSVC编译器套件则需将mysql.pro工程再用对应位数的MSVC编译器套件构建一次,此时生成的驱动库才能在MSVC构建套件下使用。

但切换到MSVC编译套件构建mysql.pro工程可能会出现如下错误

这是由于Qt中MSVC版本未设置或不正确造成的,需修改自己的编译套件目录msvc2019_64\mkspecs\common目录下的msvc-version.conf文件做对应添加修改

具体的MSVC版本对应值可以在当前的msvc-version.conf文件中去找

修改完成后我们就可以使用MSVC编译套件重新编译构建mysql.pro工程,此时生成的的驱动库如下:

若需要在MSVC编译套件环境下使用操作与前面mingw编译套件添加驱动操作类似,到此在Qt中添加Mysql驱动模块操作就完成了。

 

三、添加编译套件构建运行所需的mysql动态库文件

在我们完成前两步操作后,接下来在我们的工程中继续使用添加QMYSQL驱动时仍然会有类似之前错误的如下问题

上述错误说明我们现在是有QMYSQL这个驱动的,只是我们的Qt编译套件中无法找到对应的mysql执行库文件,这就需要将对应安装的mysql库文件拷贝至对应编译器套件的bin目录下(如采用的是mingw81_64编译套件,就将libmysql.dll拷贝至Qt安装目录/mingw81_64/bin目录下,切记64位的库只能供64位的编译器套件使用)。

16.png