QMYSQL driver not loaded 的原理和解决办法

来源:互联网 发布:软件项目验收方案 编辑:程序博客网 时间:2024/05/21 10:35

http://blog.csdn.net/historycomputer/article/details/51009244

http://blog.csdn.net/m15814478834/article/details/49902077

http://www.jb51.net/article/118794.htm


最近使用Qt遇到了"QMYSQL driver not loaded"的问题.网上回答五花八门.大部分都没法根本解决问题.解决问题的没有原理,过程还繁琐极容易犯错.希望看到我这片文章的人不要在花两周时间折腾各个版本的mysql,各个版本的Qt了.

没时间的直接看最后总结.

Qt连接到mysql的过程

Qt->Qt的数据库插件->mysql动态库->mysql

Qt的数据库插件是\plugins\sqldrivers下的qsqlmysqld.dll qsqlmysql.dll

mysql动态库是在mysql的安装目录下的libmysql.dll

以上dll存在才能顺利连接数据库.所以这篇文章所代表的拷贝libmysql.dll文件的答案占了一大半.实际上解决问题纯属幸运.当然因为需要dll,这篇文章所代表的配置环境变量又误导了一堆人,这种配置环境变量的方法更是看脸.什么mysql空格什么的更是无稽之谈.至少qt5.1开始.没有路径空格和中文的限制了.

那么为什么很多人使用Qt5以上的版本,其中包含qsqlmysqld.dll qsqlmysql.dll文件,也把libmysql.dll拷贝到Qt的bin或者程序输出目录了也还是driver not loaded呢?

因为不同版本的mysql里面包含不同的libmysql.dll, 不同的libmysql.dll必须和配套的qsqlmysqld.dll qsqlmysql.dll一起才能正常工作.

知道为什么了,如何解决呢?找到libmysql.dll去重新编译对应版本的qsqlmysqld.dll qsqlmysql.dll.别担心,和我一样不愿意敲命令行的人.我介绍一种使用Qt creater编译的方法.

1:打开Qt安装路径下的源码.例如C:\Qt\Qt5.2.0\5.2.0\Src\qtbase\src\plugins\sqldrivers\mysql.(如果没有src路径,重新安装Qt,选择完全安装就有了)双击mysql.pro

2:如果是连接远程数据库,本机可以不装mysql,但是必须找到一个mysql的安装目录复制到本地.这里面包含includ目录和lib目录.


3:编译一下mysql.pro,提示少头文件,mysql.pro中添加2中的include目录,再编译,缺少lib文件.添加lib文件.下图示例


4:把编译好的qsqlmysqld.dll qsqlmysql.dll拷贝到\plugins\sqldrivers下

5:mysql文件夹下lib路径下的libmysql.dll复制到到目录mingw47_32\bin


总结:不同版本的mysql里面包含不同的libmysql.dll, 不同的libmysql.dll必须和配套的qsqlmysqld.dll qsqlmysql.dll一起才能正常工作.可以 下载别人编译好的.

qsqlmysqld.dll qsqlmysql.dll拷贝到\plugins\sqldrivers,libmysql.dll复制到到目录mingw47_32\bin.必须配套使用,配套使用,配套使用.
























感想

由于项目需要在qt环境中使用mySQL数据库,而qt4又没有直接提供qsqlmysql插件,因而只能自己编译。中间走了很多弯路,在此总结一下。

工具

  • Qt4.8.6X64_msvc2010
  • MySQL C链接库
  • MySQLServer

步骤

  • 1.如果没有Qt4.8.6X64_msvc2010 ,则需要自己下载qt ,然后编译64位的在visual studio中使用的版本。编译过程参考其他文献。
  • 2 下载 MySQL C链接库。 http://dev.mysql.com/downloads/connector/。 
    这里写图片描述 
    我下载的是mysql-connector-c-6.1.6-winx64.msi 
    把c的链接库解压到c:\mysql目录下。(放到其他目录下也可以,但是路径中不能有空格)
  • 3 找到qt4.8.6X64_msvc2010的目录。打开src\plugins\sqldrivers\mysql,我的目录是: 
    C:\Qt\qt-4.8.6-x64-msvc2010\qt-4.8.6-x64-msvc2010\src\plugins\sqldrivers\mysql 
    把刚刚解压的c:\mysql\lib下的libmysql.dll 和libmysql.lib复制到此目录下 
    这里写图片描述
    一开始你的文件夹下面应该只有红色圈住的四个文件 ,其他的是我后来生成的。
  • 编辑目录下的mysql.pro文件,使用txt文本编辑器打开。在最下面添加如下两行 
    INCLUDEPATH += “C:/MySQL/include” 
    LIBS += “C:/MySQL/lib/libmysql.lib” 
    这里写图片描述
  • 4 打开vs command prompt ,我的工程全是使用64的库,因而选择的是64位的 
    这里写图片描述 
    注意这里打开的是vs的command 。因为我是要在vs中使用qt的mysql的。如果是在qtcreator中使用的话,要打开qt 的command prompt。
  • 5 在vs 的command prompt中做如下操作: 
    首先切换到 C:\Qt\qt-4.8.6-x64-msvc2010\qt-4.8.6-x64-msvc2010\src\plugins\sqldrivers\mysql 
    然后输入qmake mysql.pro 回车 (注意,这里,网上的其他教程会写成 qmake “INCLUDEPATH += C:\MySQL\include” “LIBS += C:\MySQL\lib\libmysql.lib” mysql.pro 。不知道怎么回事儿,我这样写的时候会出错,你可以试试这样写,如果也出错的话,就按照我的方法) 
    最后 输入nmake回车 (此时会发现当前目录下多了debug文件夹,打开debug文件夹,发现里面已经生成我们需要的qsqlmysqld4.dll qsqlmysqld4.lib)。 
    然后再输入nmake release生成release文件夹。到这里,已经生成了debug和release版本的驱动了。 
    这里写图片描述
  • 6 接下来是在vs中使用的相关配置 
    把debug和release文件夹中的qsqlmysqld4.dll 、qsqlmysqld4.lib 、qsqlmysql4.dll 、qsqlmysql4.lib四个文件拷贝到C:\Qt\qt-4.8.6-x64-msvc2010\qt-4.8.6-x64-msvc2010\plugins\sqldrivers文件夹下: 
    这里写图片描述 
    然后把c:\mysql\lib下的libmysql.dll拷贝到C:\Qt\qt-4.8.6-x64-msvc2010\qt-4.8.6-x64-msvc2010\bin目录下(这个目录应该加在系统环境变量的path中)。 
    然后在vs的属性管理中的linker 的input 的 additional dependencies 添加 
    C:\Qt\qt-4.8.6-x64-msvc2010\qt-4.8.6-x64-msvc2010\lib\QtSqld4.lib (这是debug版本配置) 
    C:\MySQL\lib\libmysql.lib 
    这里写图片描述
    • 7 编译驱动的过程其实不需要mysql server。只是在实际使用mysql编程时,需要安装mysql server。 安装mysql server ,需要下载http://dev.mysql.com/downloads/installer/ 
      我下载的是mysql-installer-community-5.7.11.0 .msi 安装即可。

原创粉丝点击