Windows 环境下使用 Qt 连接 MySQL

所属分类: 软件编程 / C 语言 阅读数: 71
收藏 0 赞 0 分享

如果应用只需要连接远程数据库,那么本地不需要安装 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 版本是 Qt 5.9.0 mingw53_32,文章中提到的一些路径是我本机上的路径,需要进行适当修改)

一、测试 Qt 与 MySQL 是否能正常连接

假设 Qt安装目录\5.9\mingw53_32\bin\  下已加入了 libmysql.dll 和 libmysqld.dll,进行以下测试。

•新建 Qt Widgets Application,修改 main.cpp 的代码为:

 #include "mainwindow.h"
 #include <QApplication>
 #include <QtSql>
 #include <QDebug>

 int main(int argc, char *argv[])
 {
   QApplication a(argc, argv);
   MainWindow w;
   w.show();

   //建立连接
   QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
   db.setHostName("localhost");
   db.setPort(3306);
   db.setDatabaseName("mysql");
   db.setUserName("root");
   db.setPassword("yourPassword");   //设置数据库连接账号的密码
   bool ok = db.open();
   if(ok) qDebug()<<"OK";
   else qDebug()<<"False";

   return a.exec();
 }

•构建并运行项目,查看应用程序输出
如果输出 OK,那到此为止了,Qt 与 MySQL 连接正常;如果输出 False,不出意外是因为 libmysql.dll、libmysqld.dll 与 qsqlmysql.dll、qsqlmysqld.dll版本不匹配!需要对 qsqlmysql.dll、qsqlmysqld.dll 进行修改。

二、添加 MySQL 的libmysql.dll、libmysqld.dll

(注意:Qt msvc2015_64 可以使用32
位、64 位版本的 MySQL 文件,Qt mingw53_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 的连接测试,成功了没有?

更多精彩内容其他人还在看

C++中四种对象生存期和作用域以及static的用法总结分析

以下是对C++中四种对象生存期和作用域以及static的用法进行了详细的介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

C++嵌套类与局部类详细解析

从作用域的角度看,嵌套类被隐藏在外围类之中,该类名只能在外围类中使用。如果在外围类之外的作用域使用该类名时,需要加名字限定
收藏 0 赞 0 分享

C++空类详解

以下是对C++中的空类进行了详细的介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

C++之友元:友元函数和友元类详解

友元是一种允许非类成员函数访问类的非公有成员的一种机制。可以把一个函数指定为类的友元,也可以把整个类指定为另一个类的友元
收藏 0 赞 0 分享

C++中返回指向函数的指针示例

int (*ff(int)) (int *,int);表示:ff(int)是一个函数,带有一个int型的形参,该函数返回int (*) (int *,int),它是一个指向函数的指针,所指向的函数返回int型并带有两个分别是Int*和int型的形参
收藏 0 赞 0 分享

C数据结构之单链表详细示例分析

以下是对C语言中的单链表进行了详细的分析介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

C数据结构之双链表详细示例分析

以下是对c语言中的双链表进行了详细的分析介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

浅析如何在c语言中调用Linux脚本

如何在c语言中调用Linux脚本呢?下面小编就为大家详细的介绍一下吧!需要的朋友可以过来参考下
收藏 0 赞 0 分享

深入解析unsigned int 和 int

以下是对unsigned int和int进行了详细的分析介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

浅谈C++中的string 类型占几个字节

本篇文章小编并不是为大家讲解string类型的用法,而是讲解我个人比较好奇的问题,就是string 类型占几个字节
收藏 0 赞 0 分享
查看更多