QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3
Qt5.0开源版本默认是不提供QMySQL驱动的,这篇文档主要讲述Windows环境下如何使用MinGW为Qt5.0安装QMySQL驱动。
(1) 安装Qt5.0开源版本的library和source code:
Qt5.0 Library: http://download.qt-project.org/official_releases/qt/5.0/5.0.2/qt-windows-opensource-5.0.2-mingw47_32-x86-offline.exe
Qt5.0 Source Code: http://download.qt-project.org/official_releases/qt/5.0/5.0.2/single/qt-everywhere-opensource-src-5.0.2.zip
(2) 安装MySQL Installer 5.6.11:
MySQL Installer 5.6.11: http://dev.mysql.com/downloads/installer/
将MySQL安装在C盘自建目录MySQL中,尽量不使用Program files目录(空格)可能引起莫名的路径问题。
(3) 打开Qt5.0命令行界面:
启动方式:开始菜单=>>所有程序==>>Qt5.0.2==>>Qt5.0.2==>>MinGW 4.7==>>Qt 5.0.2 for Desktop (MinGW 4.7)
(4) 运行以下命令:
这是最重要的一步,确保Source Code和MySQL安装在同一个盘符。
cd C:\Qt\Qt5.0.1\Sources\qtbase\src\plugins\sqldrivers\mysql\
该目录下存在几个文件,其中包括mysql.pro,我们所有的编译工作也正是从此文件开始。
qmake "INCLUDEPATH+=c:\\MySQL\\include" "LIBS+=c:\\MySQL\\lib\\libmysql.lib" -o Makefile mysql.pro
此时,会在当前目录下生成几个Makefile文件和两个文件夹类。
此处我们也可将mysql的两路径:
INCLUDEPATH += "C:/MySQL/include"
LIBS += "C:/MySQL/lib/libmysql.lib"
直接加入mysql.pro中,然后运行qmake命令如下:
qmake -o Makefile mysql.pro
最后运行:
mingw32-make
如果一切顺利,此时在C:\Qt\Qt5.0.1\Sources\qtbase\plugins\sqldrivers会生成qsqlmysql.dll和qsqlmysqld.dll文件。
(5) 配置QMySQL驱动:
拷贝qsqlmysql.dll和qsqlmysqld.dll到C:\Qt\Qt5.0.1\5.0.1\mingw47_32\plugins\sqldrivers目录中
从c:\MySQL\lib拷贝libmysql.dll到C:\Qt\Qt5.0.2\5.0.2\mingw47_32\bin,此时大功告成。
(6) 测试QMYSQL驱动:
#include <QApplication>
#include <QtSql>
#include <QtWidgets>
#include <iostream>
bool createConnection()
{
QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("test");
db.setUserName("root");
db.setPassword("123456");
if(!db.open()) {
QMessageBox::critical(0, QObject::tr("Database Error"), \
db.lastError().text());
return false;
}
return true;
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
if(!createConnection())
return 1;
QSqlQuery query("SELECT title, year FROM cd WHERE year >= 1930");
while(query.next()) {
QString title=query.value(0).toString();
int year=query.value(1).toInt()
std::cerr<<qPrintable(title)<<": "<<year<<std::endl;
}
return a.exec();
}
E:\QT\chap13\build-QMysqlTest-Desktop_Qt_5_0_2_MinGW_32bit-Debug\debug\QMysqlTest 启动中...
你好: 1983
周杰伦: 1956
萨顶顶: 1957
(7) 好吧,如果你仍然没有成功,可在此直接下载MySQL用于以下Qt版本的驱动:
Qt5.0版本: http://vdisk.weibo.com/s/aMEiEcvN1JUJH
Qt5.1版本: http://vdisk.weibo.com/s/aMEiEcvN1JUJR
虽然版本不一样,但是编译MySQL驱动的方法都遵循以上步骤,最后祝你好运。