前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决Qt5无法连接MySQL数据库的问题

解决Qt5无法连接MySQL数据库的问题

作者头像
字节星球Henry
发布2021-12-14 13:51:50
5K0
发布2021-12-14 13:51:50
举报

引言

我最近打算开一个新项目,会用到 Qt5 和 MySQL,没想到刚开始就遇到了问题...

代码语言:javascript
复制
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7

大体意思就是,这个 QSqlDatabase 里面压根就没有 QMySQL 这个驱动,在我印象中 Qt 肯定是自带了 MySQL 驱动的,搜索了一下知道了原因,在老版本的 Qt 中(5.9 还是 5.12?)在 C:\Qt\Qt5.xx\5.xx\mingwxx_xx\plugins\sqldrivers 这个目录下,有 qsqlmysql.dll 这个文件,我这边当然是没有了...所以 MySQL 肯定连不上了,既然没有那只能自己编译了,不可能去网上找吧,不同版本的文件也不同。

注意:不同版本的 MySQL 里面包含不同的 libmysql.dll,不同的 libmysql.dll 必须和配套的 qsqlmysqld.dll (debug 版)或 qsqlmysql.dll(release 版) 一起才能正常工作!

Qt MySQL 驱动搭建

准备

编译前,请确认以下几点:

  1. 你的 Qt 安装时是否选择了 Sources。
  2. 你的 Qt 安装时是否选择的 64 位的 MinGW。

很多人应该没有选择 Sources 这一项,问题不大,在控制面板-> 卸载程序中找到 Qt 右键选择更改,自行添加 Sources 这个选项,具体做法可以借助搜索引擎,不怕麻烦的也可以直接重新按要求安装 Qt。

然后确定一下你的 C:\Qt\Qt5.14.2\5.14.2\mingw73_64\plugins\sqldrivers 文件夹里是否如我描述的那样没有 qsqlmysql.dll 文件,然后再开始下一步。

编译

添加 Qt mingw 64 的环境变量,既然你都接触 Qt 了,环境变量对你来说应该是很熟悉的字眼了,就不说明怎么添加了,分别要添加的路径是:

代码语言:javascript
复制
C:\Qt\5.14.2\mingw73_64\bin\
C:\Qt\Tools\mingw730_64\bin\

将以上路径替换成你自己的 Qt 安装路径即可,一定不要搞错了。

然后准备好你的 Qt 路径和 MySQL 路径,在终端中分别执行以下四行命令:

代码语言:javascript
复制
cd C:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers
qmake -- MYSQL_INCDIR="C:\mysql-5.7.36-winx64\include" MYSQL_LIBDIR="C:\mysql-5.7.36-winx64\lib"
mingw32-make
mingw32-make install

上面的路径依然是我自己的路径,请务必更改为自己的 Qt 和 MySQL 路径!

执行完第二行命令后,正常情况会输出一下内容:

代码语言:javascript
复制
Info: creating stash file C:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\.qmake.stash

Running configuration tests...
Checking for DB2 (IBM)... no
Checking for InterBase... no
Checking for MySQL... yes
Checking for OCI (Oracle)... no
Checking for ODBC... yes
Checking for PostgreSQL... no
Checking for SQLite (version 2)... no
Checking for TDS (Sybase)... no
Done running configuration tests.

Configure summary:

Qt Sql Drivers:
  DB2 (IBM) .............................. no
  InterBase .............................. no
  MySql .................................. yes
  OCI (Oracle) ........................... no
  ODBC ................................... yes
  PostgreSQL ............................. no
  SQLite2 ................................ no
  SQLite ................................. yes
    Using system provided SQLite ......... no
  TDS (Sybase) ........................... no

Qt is now configured for building. Just run 'mingw32-make'.
Once everything is built, you must run 'mingw32-make install'.
Qt will be installed into 'C:\Qt\Qt5.14.2\5.14.2\mingw73_64'.

Prior to reconfiguration, make sure you remove any leftovers from
the previous build.

其中你需要关注你的 Checking for MySQL...后面和 Qt Sql Drivers 中的 MySql 是否都是 yes,如果不是,请检查你的路径和编译前的要求,无误后重新执行命令。

然后进行 make 和 install,中途可能会报一些 Warning,问题不大,只要命令执行完成后,你的 sqldrivers 文件夹中出现了如图所示的 qsqlmysql.dll 就代表编译完成了。

最后

将你的 libmysql.dll 放入你的 exe 文件所在目录,MySQL 数据库即可成功连接,项目最终打包上线时,也别忘了将 libmysql.dll 打包进去。

也可以编辑 qmake 的.pro 文件,在其中把该链接库加进去,但打包时还是需要自行添加 libmysql.dll:

代码语言:javascript
复制
LIBS += "C:\mysql-5.7.36-winx64\lib\libmysql.dll"
#或添加
LIBS += -LC:\mysql-5.7.36-winx64\lib\ -llibmysql

libmysql.dll 在你的 MySQL 目录下的 lib 文件夹内,不同版本也是不能混用,这里推荐 MySQL5.7。

Henry 2021-12-13 未经授权 禁止转载

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • Qt MySQL 驱动搭建
    • 准备
      • 编译
      • 最后
      相关产品与服务
      云数据库 SQL Server
      腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档