整理这篇文档的意义在于:自己走了很多弯路,淋过雨所以想为别人撑伞,也方便回顾,仅供参考
一、搭建开发环境:
- 虚拟机(ubuntu-20.04.6-desktop-amd64):
- Mysql数据库 8.0.36
- Workbench (mysql-workbench-community_8.0.29-1ubuntu20.04_amd64.deb)
- QT 5.12.12(qt-opensource-linux-x64-5.12.12.run)
其中,Mysql版本已经不支持8.0.29,在考察了兼容性之后,选择使用8.0.36:(不同版本地址)
为了提升速度,需要先换源:源链接
二、QT - QT5.12.12 连接并操作MySQL8.0:
加粗样式搭建开发环境是对整体项目环境的一种了解手段,镜像资源丰富、难度不大,但非常浪费时间。
我整理了网上比较靠谱的资料,我照着复现过一遍,文档整理如下:
-
安装 VMware Workstation Pro 16 并创建 ubuntu 20.04 虚拟机
-
历史版本
-
ubuntu20.04安装MySQL以及MySQL-workbench
-
Ubuntu20.04中Qt5.12.12安装
-
缺失的库
1、数据库连接
在Qt5版本之后,常见的问题是动态库缺失,即mySql需要完成编译工作
情况分析:连接Mysql失败,实例化打印出来:
QStringList list = QSqlDatabase::drivers();
qDebug()<<list;
打印结果表示缺少Mysql动态库:
我一开始的思路:
- 不支持动态库了 5以上多个版本是不支持的,6以上全部不支持
- 支持但安装时漏掉了
2、求助官方文档(文档链接):
原话如下:
How to Build the QMYSQL Plugin on Unix and macOS?
You need the MySQL / MariaDB header files, as well as the shared
librarylibmysqlclient.so
/libmariadb.so
. Depending on your Linux
distribution, you may need to install a package which is usually
called “mysql-devel” or “mariadb-devel”.
Tell qmake where to find
the MySQL / MariaDB header files and shared libraries (here it is
assumed that MySQL / MariaDB is installed in/usr/local
) and run
make
:
eg:
mkdir build-sqldrivers
cd build-sqldrivers
qt-cmake -G Ninja <qt_source_directory>/qtbase/src/plugins/sqldrivers -DCMAKE_INSTALL_PREFIX=<qt_installation_path>/<platform> -DMySQL_INCLUDE_DIR="/usr/local/mysql/include" -DMySQL_LIBRARY="/usr/local/mysql/lib/libmysqlclient.<so|dylib>"
cmake --build .
cmake --install .
难点:
-
过往有简单的Cmake经验,通常是配置Cmakelists文件:我之前配置Cmake的心得,在这里没能完全理解文档的意思
-
开始思路不清晰,不确定是整体库缺失,需要安装mysql-devel,还是单纯缺失libmysqlclient,需要单独下载。
最终的方法(实测没问题):
-
安装命令:
sudo apt-get install libmysqlclient-dev
-
配置文件(主要标注的是需要改动的部分,其余内容不要修改):
mysql.pro:
#QMAKE_USE += mysql
qsqldriverbase.pri:
QT = core core-private sql-private#include($$shadowed($$PWD)/qtsqldrivers-config.pri) include($$shadowed($$PWD)/configure.pri)PLUGIN_TYPE = sqldrivers load(qt_plugin)DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII
3、make生成动态库:libqsqlpsql.so
4、拷贝移动到Qt的数据库驱动:sqldrivers中即可
效果图如下:
最终验证也是实现了想要的效果:
总结
Qt连接到mysql的过程:app->Qt的数据库插件->mysql动态库->mysql服务
补充说明(Windows道理一样)
How to Build the QMYSQL Plugin on Windows
You need to get the MySQL installation files (e.g. mysql-installer-web-community-8.0.18.0.msi) or mariadb-connector-c-3.1.5-win64.msi. Run the installer, select custom installation and install the MySQL C Connector which matches your Qt installation (x86 or x64). After installation check that the needed files are there:
Win参考文档