Windows+MySQL+Qt,驱动配置方法,解决MYSQL driver not loaded问题

Windows+MySQL+Qt,驱动配置方法,解决MYSQL driver not loaded问题

问题描述

QT虽然提供了对MySQL、SQLLite 等数据库的支持,但是若不对驱动进行配置,有可能会出现Driver not loaded.的问题。
部分测试代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtCore/QCoreApplication>
#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>
#include <QStringList>
#include <QString>
#include <QSqlQuery>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QStringList drivers;
    drivers= QSqlDatabase::drivers();
    foreach(QString driver, drivers)
        qDebug() << "\t" <<driver;

    QSqlDatabase dataBase=QSqlDatabase::addDatabase("QMYSQL");
      dataBase.setHostName("localhost");
      dataBase.setUserName("root");
      dataBase.setPassword("root");
      dataBase.setDatabaseName("world");
      dataBase.open();

      bool ok=dataBase.open();
      if(ok)
      {
          qDebug()<<"open database success";
      }
      else
      {
          qDebug()<<"error open database because"<<dataBase.lastError().text();
       }

      QSqlQuery query(dataBase);

      //query.exec("SET NAMES 'src'");
      query.exec("create table student3(number int , name char(32), score double)");
}

运行后的输出错误提示为:

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
error open database because "Driver not loaded Driver not loaded"
QSqlQuery::exec: database not open

系统提示可用的数据库驱动有QSQLITE,QMYSQL,QODBC,QODBC3,QPSQL.QPSQL7等,但是为什么依然是驱动无法加载呢?问题的在于:不同版本的mysql里面包含不同的libmysql.dll, 不同的libmysql.dll必须和配套的qsqlmysqld.dll qsqlmysql.dll一起才能正常工作.
解决这一问题的过程中,本人查阅了大量的资料,大多数的结果不尽人意,经历了数日的折磨,近乎放弃,终于在夜深人静的时候,山重水复疑无路,柳暗花明又一村。下面将本人解决这一问题的过程总结,以供参考。

MYSQL的安装

MYSQL的安装过程比较简单,找到适用的版本,到官网下载安装包,然后按照要求进行安装与配置即可,此处需要注意的是,MYSQL的位数需要与QT编译器位数一致,本人使用的是QT的MinGW 32bit编译器进行编译,因此安装了32位(X86)的MYSQL。
完成安装并配置完成后,为了方便MYSQL的运行,将MYSQL安装目录中的\bin目录加入到系统环境变量Path中。具体方法,请百度。
然后可以运行一些基本的操作,检查MySQL安装与配置的正确性。运行截图如下:MYSQL运行截图

准备QT中MySQ驱动源码

这一步需要安装QT的过程中,选择了QT源码的安装,若没有安装,可重新安装。方法为在安装过程中,勾选Source前的复选框即可。
源码的位置在安装目录下的SRC文件夹,例如:D:\Qt\Qt5.9.2\5.9.2\Src
在源码文件夹中,找到mysql驱动所在的文件夹,例如:D:\Qt\Qt5.9.2\5.9.2\Src\qtbase\src\plugins\sqldrivers\mysql
这里就是mysql驱动所在的文件夹,将这里的源文件进行编译生成后,即可得到所需要的mysql驱动,但是事情并没有这么简单。

修改mysql.pro文件

  1. 在MYSQL驱动源码所在的文件夹找到mysq.pro文件,并用记事本打开,加入以下两行于最后两行之前。
INCLUDEPATH += "D:\\mysql-5.5.56-win32\\include"
LIBS += "D:\\mysql-5.5.56-win32\\lib\\libmysql.lib"

这两行分别是MYSQL 安装目录中头文件与库文件所大的目录,编译过程中需要这两个文件。
在QMAKE_USE += mysql语句前加#,将其注释掉,若不执行此操作,在编译过程中,会提示lib mysql is not defined

编译驱动

1.将qmake 所在的目录加入到系统的环境变量中,此步骤的目的是方便qmake的使用,也可以直接找到qmake的命令行程序,打开后运行。
在qmake命令行工具中 ,输入以下代码,切换到数据库驱动源码所在的文件夹

cd D:\Qt\Qt5.9.2\5.9.2\Src\qtbase\src\plugins\sqldrivers

2.执行qmake,结果如下。

D:\Qt\Qt5.9.2\5.9.2\Src\qtbase\src\plugins\sqldrivers>qmake

Running configuration tests...
Done running configuration tests.

Configure summary:

Qt Sql:
  DB2 (IBM) .............................. no
  InterBase .............................. no
  MySql .................................. no
  OCI (Oracle) ........................... no
  ODBC ................................... yes
  PostgreSQL ............................. no
  SQLite2 ................................ no
  SQLite ................................. yes
    Using system provided SQLite ......... no
  TDS (Sybase) ........................... no

Qt is now configured for building. Just run 'mingw32-make'.
Once everything is built, Qt is installed.
You should NOT run 'mingw32-make install'.
Note that this build cannot be deployed to other machines or devices.

Prior to reconfiguration, make sure you remove any leftovers from
the previous build.

3.切换到mysql 文件夹,输入代码cd mysql
4.依次执行以下代码

qmake
mingw32-make
mingw32-make release-install
mingw32-make debug-install

完成后,将MYSQL安装目录中lib文件夹下的,libmysql.lib和libmysql.dll拷贝到QT编译器所在目录,例如:D:\Qt\Qt5.9.2\5.9.2\mingw53_32\bin

测试

再次运行前文测试代码,主要结果如下

	 "QSQLITE"
	 "QMYSQL"
	 "QMYSQL3"
	 "QODBC"
	 "QODBC3"
	 "QPSQL"
	 "QPSQL7"
...
open database success

查看MYSQL中的数据表,执行代码show tables;
在这里插入图片描述
数据库中的数据表已被修改。

以下为解决问题过程中,查找到的一些具备参考意义的文章,其中包括环境变量的修改方法等,链接如下:
[1]: https://www.cnblogs.com/forsee/p/11963832.html
[2]: https://blog.csdn.net/m15814478834/article/details/49902077
[3]: https://blog.csdn.net/m15814478834/article/details/49902077
[4]: https://blog.csdn.net/Yingyingjia/article/details/87861737

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值