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安装与配置的正确性。运行截图如下:
准备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文件
- 在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