作者:billy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
前言
上篇中我们安装好了 MySQL 数据库和 Navicat 软件,下面在 Qt 中尝试使用数据库
1. 在 Qt 中连接 MySQL 数据库,尝试一下是否可行
-
在 pro 中添加数据库模块
QT += sql
-
测试代码如下:
#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>
int main()
{
QSqlDatabase database = QSqlDatabase::addDatabase("QMYSQL");
database.setHostName("127.0.0.1");
database.setPort(3306);
database.setUserName("root");
database.setPassword("12345678");
database.setDatabaseName("swyl");
if ( database.open() ) {
qDebug() << "ok";
} else {
qDebug() << "ng";
qDebug() << database.lastError().text();
}
return 0;
}
-
此时运行代码会报错,提示你 没有加载 QMYSQL 数据库的驱动
-
上面提示了目前可用的数据库驱动,没有 MySQL 的,那就需要我们编译驱动并拷贝到 Qt 中
2. 编译 MySQL 代码并拷贝驱动
-
把下载的 源代码 mysql-8.0.34-winx64.rar 这个压缩包复制到 MYSQL 安装目录下并解压
-
打开 Qt 自带的 mysql 工程
路径:D:\Qt\Qt_5.15.2\5.15.2\Src\qtbase\src\plugins\sqldrivers\mysql
-
修改 pro 文件
-
修改 pri 文件
-
用 mingw 编译器编译
得到下图中3个文件,把 qsqlmysql.dll 拷贝到 D:\Qt\Qt_5.15.2\5.15.2\mingw81_64\plugins\sqldrivers
-
用 msvc 编译器编译
得到 debug 和 release 版本的 lib 和 dll
把编译生成的 qsqlmysql.dll 和 qsqlmysqld.dll 拷贝到 D:\Qt\Qt_5.15.2\5.15.2\msvc2019_64\plugins\sqldrivers
再把 qsqlmysql.lib 和 qsqlmysqld.lib 拷贝到 D:\Qt\Qt_5.15.2\5.15.2\msvc2019_64\lib
最后把 qsqlmysql.dll 和 qsqlmysqld.dll 拷贝到 D:\Qt\Qt_5.15.2\5.15.2\msvc2019_64\bin
-
现在 Qt 中已经有 MySQL 的驱动了,再运行测试程序,就可以成功了
3. 程序打包发布后无法连接 MySQL 数据库
使用 windeployqt 打包发布程序时,不会把 MySQL 的依赖库带上,需要我们手动去拷贝,否则在另一台电脑上就会出现无法连接 MySQL 数据库的情况
需要的依赖库还挺多,网上说的只拷贝 plugins 下的亲测是不行的,博主整理了一下需要这些:
1)首先 qsqlmysql.dll 和 qsqlmysqld.dll 是刚才我们编译得到的,发布 release 版本时 qsqlmysqld.dll 可以不用带着
2)libmysql.dll 在 MySQL 源代码路径中 D:\MySQL\mysql-8.0.34-winx64\lib
3)libssl-3-x64.dll 和 libcrypto-3-x64.dll 是 libmysql.dll 的依赖项,也在 MySQL 源代码路径中
4)本以为拷贝了上述几个依赖库就足够了,结果测试还是不行,还需要最后两个在 Qt 的安装路径下
更多请参考
- Qt 中使用 MySQL 数据库保姆级教程(上)