惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
P
Privacy International News Feed
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
Cisco Talos Blog
Cisco Talos Blog
S
Schneier on Security
Project Zero
Project Zero
T
Threatpost
Spread Privacy
Spread Privacy
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
AWS News Blog
AWS News Blog
H
Heimdal Security Blog
V
Visual Studio Blog
Google DeepMind News
Google DeepMind News
P
Privacy & Cybersecurity Law Blog
J
Java Code Geeks
罗磊的独立博客
博客园 - Franky
博客园 - 叶小钗
S
Security Affairs
月光博客
月光博客
Application and Cybersecurity Blog
Application and Cybersecurity Blog
The Last Watchdog
The Last Watchdog
WordPress大学
WordPress大学
人人都是产品经理
人人都是产品经理
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
A
Arctic Wolf
Cloudbric
Cloudbric
www.infosecurity-magazine.com
www.infosecurity-magazine.com
V2EX - 技术
V2EX - 技术
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LINUX DO - 最新话题
Y
Y Combinator Blog
宝玉的分享
宝玉的分享
酷 壳 – CoolShell
酷 壳 – CoolShell
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
N
News | PayPal Newsroom
Hugging Face - Blog
Hugging Face - Blog
美团技术团队
W
WeLiveSecurity
云风的 BLOG
云风的 BLOG
The Register - Security
The Register - Security
I
InfoQ
F
Fortinet All Blogs
T
The Exploit Database - CXSecurity.com
S
SegmentFault 最新的问题
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
L
Lohrmann on Cybersecurity

Blog Feed

锐评简笔记/某站商店/某彦 - 字节星球 浅谈 DDD 领域驱动设计架构 - 字节星球 浅谈分布式事务#2 - 字节星球 浅谈分布式事务 - 字节星球 聊聊大学里面的奇葩 - 字节星球 MySQL 加锁机制分析与死锁排查 - 字节星球 Golang pprof 案例实战 - 字节星球 Golang 手写一个 Channel - 字节星球 字节星球终于全栈上新! - 字节星球 欢迎试用 TodoList - 字节星球 记一次“说走就走”的成都行 - 字节星球 Docker Desktop修改默认存储路径 - 字节星球 流程中心使用指南 - 字节星球 微分方程小手册 - 字节星球 近期小记 - 字节星球 字节星球(肥柴之家)搬家了! - 字节星球 如何顺利注册ChatGPT? - 字节星球 披着CLion的外衣实则在讲CMake - 字节星球 守望之墓/电子骨灰盒 - 字节星球 Python笔记 第三章 - 字节星球 WePlanet现已发布! - 字节星球 简单选择排序和堆排序 - 字节星球 希尔排序 - 字节星球 插入排序 - 字节星球 快速排序 - 字节星球 Python 笔记 第二章 - 字节星球 Python笔记 第一章 - 字节星球 Web使用HarmonyOS字体的压缩方案 - 字节星球 字节星球关于在评论区等位置展示IP属地的公告 - 字节星球 MATLAB简明教程#1 - 字节星球 时隔多年,终于摆脱了控制台 - 字节星球 论内卷 - 字节星球 堆排序 - 字节星球 连通块中点的数量 - 字节星球 合并集合(并查集) - 字节星球 Trie字符串统计 - 字节星球 KMP字符串 - 字节星球
解决Qt5无法连接MySQL数据库的问题 - 字节星球
2021-12-13 · via Blog Feed

2021/12/13 22:55:00admin7489 阅读0 点赞1 评论

引言

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

TEXT

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 驱动构建(使用 MinGW 编译套件)

准备

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

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

image.png

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

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

编译

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

TEXT

C:\Qt\5.14.2\mingw73_64\bin\
C:\Qt\Tools\mingw730_64\bin\

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

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

SHELL

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 路径!

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

TEXT

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 就代表编译完成了。

image.png

Qt MySQL 驱动构建(使用 MSVC 编译套件)

准备

与使用 MinGW 编译类似,不同的是在使用 QtCreator 配置这个项目时,需要选择对应版本的 MSVC 编译套件,这里以 Qt5.15.2 为例,首先打开 mysql 驱动的 Qt 工程文件:

TEXT

C:\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers\mysql\mysql.pro

image.png

在这里我选择 MSVC2019 64bit (注意与自己的 Qt 版本对应,这里对应 Qt5.15.2),然后配置项目即可。
然后会出现一些 error,此时将 mysql.pro 文件中的部分代码修改为:

TEXT

TARGET = qsqlmysql

HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp

# QMAKE_USE += mysql  注释此处

#以下路径根据自己的mysql安装路径添加
LIBS += -LC:/mysql-5.7.36-winx64/lib -llibmysql
INCLUDEPATH += C:/mysql-5.7.36-winx64/include
DEPENDPATH += C:/mysql-5.7.36-winx64/include

OTHER_FILES += mysql.json

PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
  • LIBS 指定的本地 mysql 动态库路径和动态库的名字;
  • -L 指定库的路径;
  • -l 指定库的名字,不需要写后缀,对应的文件全名为 libmysql.dll
  • INCLUDEPATHDEPENDPATH 指定的是本地 mysql 的头文件目录。

编译

修改完成后,选择 Release 进行编译,会出现错误:error: Cannot read C:/qtsqldrivers-config.pri: No such file or directory,此时打开项目中 qsqldriverbase.pri文件:

TEXT

# include($$shadowed($$PWD)/qtsqldrivers-config.pri) 注释此处
include(./configure.pri) # 添加本行

然后重新按上述方法编译即可,编译成功之后,就得到了该项目生成的库文件,库文件的位置在安装 Qt 所在盘符的 plugins 目录中。

  • qsqlmysql.dll Release 版本的动态库
  • qsqlmysqld.dll Debug 版本的动态库

最后

mysql 安装目录中的 libmysql.dll 放入你的 Qt 对应编译套件文件夹的 bin 目录或 exe 文件所在目录,MySQL 数据库即可成功连接,项目最终打包上线时,也别忘了将 libmysql.dll 打包进去。

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

TEXT

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。

其次,还需要将刚才我们编译好的驱动qsqlmysql.dllqsqlmysqld.dll复制到以下路径:

TEXT

C:\Qt\5.15.2\msvc2019_64\plugins\sqldrivers # 根据自己的版本选择对应路径

参考内容:https://subingwen.cn/qt/sql-driver/


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

附件下载