在尝试连接数据库时,我才发现这有点坑啊,开帖记录一下。
我使用的Qt版本是Qt 5.7.0 mingw,安装于Windows10 64位操作系统下;MySQL版本是64位5.1.736,安装于阿里云服务器上。
首先记得允许数据库远程连接。
GRANT ALL PRIVILEGES ON *.* TO ' 你的用户名 '@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION;
在工程的.pro文件里加上一句(重要):
QT += sql
Qt连接MySQL的代码如下:
#include <QApplication> #include<Qtsql/QSqlDatabase> #include<QtSql/qsqlquery.h> #include<QDebug> #include<QDataStream> int main(int argc, char *argv[]) { QApplication a(argc, argv); QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("ip地址"); //本地则为127.0.0.1 db.setDatabaseName("数据库名"); db.setUserName("用户名"); db.setPassword("密码"); if(db.open()) { qDebug()<<"s"; }else{ qDebug()<<"f"; } db.close(); return a.exec(); }
编译后会提示driver is not load。其实Qt5.2版本以后是自带MySQL驱动的,但是我们的显然不能使用,所以需要重新编译。
查看了很多博客和论坛(也踩了很多坑以后)以后,解决方法如下:
1.如果你像我一样MySQL不是安装在本地,那么要先下载Windows下的MySQL32位驱动(MinGW是32位的,故下载32位驱动,是可以连上64位的数据库的)。
传送门:https://www.mysql.com/products/connector/
我下的是C的版本(最后也编译成功了),安装路径在C:\MySQL。
2.我的Qt安装路径是C:\Qt\Qt5.7.0 ,你可以安装在其他路径但是路径里不要带空格。安装时请注意勾选Sources(重要),挺大的,装了很久。
进入MySQL驱动文件所在的路径:C:\Qt\Qt5.7.0\5.7\Src\qtbase\src\plugins\sqldrivers\mysql,根据MySQl的安装路径,在mysql.pro文件里加上:
INCLUDEPATH+="C:/MySQL/include" LIBS+="C:/MySQL/lib/libmysql.lib"
(很重要的注意:C:\Qt\Qt5.7.0\5.7\Src\qtbase\src\plugins\sqldrivers和C:\Qt\Qt5.7.0\5.7\Src\qtbase\plugins\sqldrivers这两个路径不一样,仔细核对呀。)
3.保存以后,打开Qt 命令行工具,进入路径:cd C:\Qt\Qt5.7.0\5.7\Src\qtbase\src\plugins\sqldrivers\mysql
执行:qmake "INCLUDEPATH+=C:\MySQL\include" "LIBS+=C:\MySQL\lib\libmysql.lib" -o Makefile mysql.pro
执行:mingw32-make
这时候进入C:\Qt\Qt5.7.0\5.7\Src\qtbase\plugins\sqldrivers,发现新生成的四个文件:
4.把qsqlmysql.dll和qsqlmysqld.dll覆盖至C:\Qt\Qt5.7.0\5.7\mingw53_32\plugins\sqldrivers下,最后把C:\MySQL\lib下的libmysql.dll拷贝至C:\Windows。
再次运行连接MySQL的代码,返回:
Starting E:\Application\build-test-Desktop_Qt_5_7_0_MinGW_32bit-Debug\debug\test.exe... s连接成功。
一些可能踩的坑:
1.Qt安装路径里不能带空格,否则可能无法编译成功。
2.有人输入qmake语句后返回:Cannot find file: mysql.pro.,那你可能是进错路径了。看看你进入的路径下有mysql.pro这个文件咩。
3.找不到C:\Qt\Qt5.7.0\5.7\Src\qtbase\src\plugins\sqldrivers\mysql这个路径,那你可能是安装Qt时没有勾选Sources。
4.注意分清C:\Qt\Qt5.7.0\5.7\Src\qtbase\src\plugins\sqldrivers\mysql和C:\Qt\Qt5.7.0\5.7\Src\qtbase\plugins\sqldrivers呀。
希望能提供微小的帮助,如有错误欢迎指教。(つ·w |