Windows 环境下使用 Qt 连接 MySQL
如果应用只需要连接远程数据库,那么本地不需要安装MySQL,只需要找到MySQL提供的libmysql.dll和libmysqld.dll两个动态连接库,把他们加入到Qt安装目录\5.9\mingw53_32\bin\;默认Qt自带已编译好的qsqlmysql.dll和qsqlmysqld.dll(文件路径为Qt安装目录\5.9\mingw53_32\plugins\sqldrivers\);两者如果配套就能成功地让Qt连接上MySQL。
(我安装的Qt版本是Qt5.9.0mingw53_32,文章中提到的一些路径是我本机上的路径,需要进行适当修改)
一、测试Qt与MySQL是否能正常连接
假设Qt安装目录\5.9\mingw53_32\bin\ 下已加入了libmysql.dll和libmysqld.dll,进行以下测试。
•新建QtWidgetsApplication,修改main.cpp的代码为:
#include"mainwindow.h" #include#include #include intmain(intargc,char*argv[]) { QApplicationa(argc,argv); MainWindoww; w.show(); //建立连接 QSqlDatabasedb=QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); db.setPort(3306); db.setDatabaseName("mysql"); db.setUserName("root"); db.setPassword("yourPassword");//设置数据库连接账号的密码 boolok=db.open(); if(ok)qDebug()<<"OK"; elseqDebug()<<"False"; returna.exec(); }
•构建并运行项目,查看应用程序输出
如果输出OK,那到此为止了,Qt与MySQL连接正常;如果输出False,不出意外是因为libmysql.dll、libmysqld.dll与qsqlmysql.dll、qsqlmysqld.dll版本不匹配!需要对qsqlmysql.dll、qsqlmysqld.dll进行修改。
二、添加MySQL的libmysql.dll、libmysqld.dll
(注意:Qtmsvc2015_64可以使用32
位、64位版本的MySQL文件,Qtmingw53_32只能使用32位版本的MySQL文件)
之前提到,如果应用只需要连接远程数据库,那么本地不需要安装MySQL,而只需要用到MySQL提供的动态连接库libmysql.dll和libmysqld.dll。那么如果不安装MySQL,怎么获取那两个动态链接库文件?可以这样做:
•从已安装了MySQL的机器上拷贝这两个文件。
•本地临时安装MySQL,然后保留下需要的文件,卸载MySQL。
安装MySQL可以去官网下载安装包,不过我不太喜欢这样做,因为现在MySQL的安装组件太多太杂,很多东西都是不必要。推荐去一些开源镜像站上下载对应版本,比如说Tuna、USTC。临时安装MySQL之后先不急着卸载,后面编译MySQL驱动会用到。
三、重新编译qsqlmysql.dll、qsqlmysqld.dll
编译Qt关于MySQL的驱动需要用到Qt的源码,获取Qt的源码可以使用MaintenanceTool.exe下载Src,编译驱动用到的工程文件路径为Qt安装目录\5.9\Src\qtbase\src\plugins\sqldrivers\mysql\。源码差不多有2G的大小,而编译驱动需要用到的工程文件大约几十M,要是存储空间和网速不给力,建议只下载
qtbase-opensource-src-5.9.0.zip,需要的工程在qtbase-opensource-src-5.9.0\src\plugins\sqldrivers\mysql\。
用Qt打开上面提到的编译驱动用到的工程文件,在mysql.pro末尾加上这两句:
INCLUDEPATH+=mysql安装目录\include
LIBS+=-Lmysql安装目录\lib\-llibmysql
构建并运行项目会在C盘下生成plugins\sqldrivers目录,里面包含qsqlmysql.dll、qsqlmysqld.dll两个文件,将它们复制一份覆盖原先的两个文件即可。再次进行Qt与MySQL的连接测试,成功了没有?