Qt下Mysql驱动的编译添加
一、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位的编译器套件使用)。