博文许久无暇更新,最近在做个Qt的系统,用到了MySql数据库,没想到在使用的过程中出现了各种各样的问题,今天终于成功了,现在记录下。
1、MySql安装
这里我用的是免安装版本,需要安装的童鞋百度教程即可
2、Qt安装
教程百度即可,注意的是,安装过程中一定要选择源码安装,后面会用得上的。
3、连接测试
qDebug()<<QSqlDatabase::drivers();
//建立连接
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setPort(3306);
db.setDatabaseName("hotel");
db.setUserName("root");
db.setPassword("123456"); //设置数据库连接账号的密码
bool ok = db.open();
if(ok)
qDebug()<<"OK";
else
qDebug()<<"False";
上面的代码是个测试数据库连接过程,测试过程中,出现了一下问题:“QSqlDatabase can’t open:”和“QSqlDatabase: QMYSQL driver not loaded”等问题,于是开始百度,开始解决以上问题:
**(1)**保证Qt 和MySql版本一致,都为32位版本,同时将libmysql.dll拷贝到Qt安装目录下:D:\Qt\Qt5.12.5\5.12.5\mingw73_32\bin,然后重新编译,问题依旧;
**(2)**经过查询发现,Qt中缺少了qsqlmysql.dll和qsqlmysqld.dll,这两个dll是Qt和MySql之间沟通的桥梁,缺一不可,于是开始重新编译Qt源码,经过查找路径如下:
**(3)**编译过程如下
win32:LIBS += D:/mysql-5.7.32-win32/lib/libmysql.lib # 添加你的mysql安装目录下的lib文件夹下的libmysql.lib文件
INCLUDEPATH += D:/Program Files/MySQL 5.7/mysql-5.7.32-win32/include # 添加你自己的mysql安装目录下的include文件夹
DEPENDPATH += …/Program Files/mysqlDll 设置编译好的qmysql.dll放置的目录,不过这里dll最后生成放在D:\plugins\sqldrivers目录下
点击qt左下角的小锤子,出现如下的两个错误:
Cannot read H:/qtsqldrivers-config.pri: No such file or directory
Project ERROR: Library ‘mysql’ is not defined.
问题1:
第一个问题是说没有这样的文件,看了下,的确没有这个文件,但是找到了类似的文件,我在我的文件夹:
D:\Qt\Qt5.12.5\5.12.5\Src\qtbase\src\plugins\sqldrivers下,发现了一个configure.pri,就把原来需要qtsqldrivers-config.pri的地方改成configure.pri。
解决:
在qt里的左侧栏里,双击qsqldriverbase.pri打开该文件,将第四行注释掉,也就是前面加个#号,这样:
#include(
s
h
a
d
o
w
e
d
(
shadowed(
shadowed(PWD)/qtsqldrivers-config.pri),然后添加include(./configure.pri),保存,完成。
问题2:
Library ‘mysql’ is not defined,这个最好解决,你说未定义,那我就不要了呗,在qt左侧栏中双击打开mysql.pro,将第六行注释掉,这样:#QMAKE_USE += mysql,这个参考了其他人的博客,但是这里我发现“win32:LIBS += D:/mysql-5.7.32-win32/lib/libmysql.lib # 添加你的mysql安装目录下的lib文件夹下的libmysql.lib文件”这里的路径如何包含空格,发现也会报错,原因暂不可知,Qt我记得是支持含空格的路径。
修改完,再重新构建,一路顺利
将生成的qsqlmysql.dll文件和qsqlmysqld.dll拷贝到Qt的bin目录下,最后demo重新编译,测试成功。
总结,如果使用了Qt sql模块来操作MySQL数据库的话,需要三个库文件来支持,分别为:libmysql.dll、qsqlmysql.dll文件和qsqlmysqld.dll文件,三个文件缺一不可。若在Qt安装路径的插件文件夹路径下(D:\Qt\Qt5.12.5\5.12.5\mingw73_32\plugins\sqldrivers )找不到对应的驱动扩展文件,那就需要编译相应的驱动扩展文件到相应路径。同时要将用于与MySQL连接的扩展包:mysql-5.7.32-win32文件夹下的libmysql.dll库文件复制到Qt构建套件路径D:\Qt\Qt5.12.5\5.12.5\mingw73_32\bin文件夹中,确保能与MySQL连接成功。
花了一天时间,终于弄明白了,Qt下MySql是如何来工作的。