前言:
前一段时间项目紧张的,调一个数据库,总是连不上MySQL,于是用QT自己的SQLlite,好像也是可以的。直到,朴树把猎户星座的专辑自己给推翻了,重新在11-15日又发行了一把,暗暗佩服!今天不服,把MySQL的驱动一点一点给调了出来,遇到好些问题,都细致记录下来,算是对朴树新专辑发行的告慰一下。
0 环境设置:
Your MySQL connection id is 8
Server version: 5.7.17-log MySQL Community Server (GPL)
mysql> show global variables like 'port';
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 12
Current database: *** NONE ***
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3306 |
+---------------+-------+
1 row in set, 1 warning (1.94 sec)
1 数据库驱动问题的表现:
应用程序打印的输出如下:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL
上面显示,其实数据库已经available 但是,没有loaded
2 下载和安装完整版本的MYSQL:(如果你没有的话)
2.1 百度云盘分享
上一节我们讲到安装MYSQL,这里分享一个安装的链接:
http://pan.baidu.com/s/1b48RNK
2.2 官网下载
mysql http://dev.mysql.com/downloads/
2.3 安装MYSQL:
拿到的include lib后面需要放到你用到的编译器来编译生成需要的库文件。
4 高版本5.0以上版本直接 COPY MYSQL的连接库到QT的工作目录:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL
前面的QT的应用程序打印里面,其实,已经告诉我们QMYSQL的驱动已经有了,第3节的编译其实就是生成这个驱动。
但是,现在驱动已经有了,还是出现了驱动没有安装的问题,这里一般主要是驱动文件的dll的文件路径找不到了,或者是版本不对。
4.1 步骤1 获取Mysql连接库
4.1.1 Mysql的dll lib文件
这两个文件在我的文件分享里面已经有了:
http://download.csdn.net/download/yellow_hill/10109819
在我的源文件分享包里 有Mysql的源码包,
路径:MySQL\mysql-connector-c-6.1.11-win32\mysql-connector-c-6.1.11-win32\lib
包含,libmysql.dll,libmysql.lib 两个我们需要用到的MYSQL的库和连接动态库
也可以直接去网站注册下载:
include 和 lib 来自于MySQL connector /C 的源文件,
具体链接如下:
https://www.mysql.com/downloads/
4.1.2 QT的编译器(用了放我们要用到的连接库)
C:\Qt\5.6\mingw49_32\bin
4.2 步骤2 我们需要做什么呢
driver not loaded
3 低版本构建数据库驱动:(后来发现低版本才需要)
既然是构建驱动,那么,很显然,我们需要用数据库驱动的源码,然后,用目前项目用到的编译器来进行编译。(山谷案:这是基本原理)
由于QT的免费社区版本没有准备这些你需要的源码,那么你必须准备,这在做过linux项目的工程来看,是非常稀松平常的一件事情。
3.1 准备lib和path
编译之前,显然,你需要把编译路径准备好,在linux里面也许只需要更改 makefile的配置文件,
在windows里面你需将QT的bin目录和mingw的目录都添加到环境变量的path中。添加的方法,请百度一下
也可以参照这个连接:https://jingyan.baidu.com/article/d5a880eb6aca7213f047cc6c.html
C:\Qt\Tools\MinGW\bin
C:\Qt\5.6\mingw49_32\bin
3.2 修改项目文件:
添加:需要加入的Mysql的库名到项目配置文件里面,这里就是PRO的文件,后面,编译的时候需要编译这个配置文件。
libmysql.lib这个文件是最好我们用项目使用的编译器来编译的库文件,mysql下载的库也许并不好用,理由是编译器不一样,尤其是64位和32位搞混的时候。
INCLUDEPATH += "E:\mysql\include"
LIBS+= "E:/mysql/lib/libmysql.lib"
3.3 编译生成驱动库
3.3.1 确认编译器
上图默认的就是你现在使用的编译器,然后,点击Manage你可得到你现在编译器的路径:
上面这个地址就是你现在编译器的地址(确认这个之后,我们就用这个编译器去生成MYSQL的数据库文件)
然后,我们需要
3.3.2 准备要编译的源文件
将前面mysql安装目录下的include和lib两个源文件的文件夹拷贝到现在你的编译器所在的地方备用,准备生成驱动文件。
一般为下面这个目录里面
src\plugins\sqldrivers\mysql
我的项目构建如下:
C:\Qt\5.6\mingw49_32\plugins\sqldrivers\mysql
3.3.3 编译生成makefile
然后,开始我们的重头戏,编译MYSQL库文件,
目的配置,由于我的项目文件Demo7在E盘的其他地方,所以编译的时候,需要重新指定一下。(路径指定的时候一定要注意等号两边都不要加空格,否则编译不通)
C:\Qt\5.6\mingw49_32\plugins\sqldrivers\mysql>qmake INCLUDEPATH+="E:\mysql\include" LIBS+="E:\mysql\lib\libmysql.lib" E:\QT\demo7\Demo07\Demo07.pro
编译后,会生成:在mysql目录下生成了debug和release的makefile文件Makefile.Debug和Makefile.Release。(之前只有include lib 目录)
3.3.4 开始编译生成我们需要的驱动库文件
上一届我们是在qmake的直接写参数,INCLUDEPATH+="E:\mysql\include" LIBS+="E:\mysql\lib\libmysql.lib" ,其实,qtcreator 的项目配置里面也可以配置
INCLUDEPATH+="E:\mysql\include" LIBS+="E:\mysql\lib\libmysql.lib"
首先需要确认一下QT的项目文件里面的制定是否正确,最保险的方式是直接路径指定好。
我们现在还是直接路径指定来生产驱动文件,
然后,开始编译
C:\Qt\5.6\mingw49_32\plugins\sqldrivers\mysql>mingw32-make release
编译后,会生成我们需要的dll 和 库文件
参考:
1 Qt4.8.5 配置mysql驱动
http://blog.csdn.net/lixiaowei16/article/details/45917657
2 QT连接MySQL
http://www.cnblogs.com/zhaotian/p/5790068.html
ref:
http://jingyan.baidu.com/article/27fa7326ffb99146f8271fe0.html