Qt mingw编译MySQL驱动和连接MySQL数据库

时间:2022-04-02 04:55:27
最近课设要写一个空间数据管理系统,我打算用Qt写客户端,需要连接数据库。由于MySQL从4.1开始支持空间数据,就果断使用MySQL了。

在尝试连接数据库时,我才发现这有点坑啊,开帖记录一下。


我使用的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/

Qt mingw编译MySQL驱动和连接MySQL数据库

我下的是C的版本(最后也编译成功了),安装路径在C:\MySQL。


2.我的Qt安装路径是C:\Qt\Qt5.7.0 ,你可以安装在其他路径但是路径里不要带空格。安装时请注意勾选Sources(重要),挺大的,装了很久。

Qt mingw编译MySQL驱动和连接MySQL数据库

进入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,发现新生成的四个文件:

Qt mingw编译MySQL驱动和连接MySQL数据库


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 |