最近在学习QtSQL,SQLITE用起来很爽,但是速度貌似有点慢,于是就想换MYSQL试试,结果死活加载不了驱动。网上搜出来一大堆文章,挨个试了个遍都不行,差点被劝退。最后终于摸索出来了,将详细的过程记录下来,如果你刚好被这个问题折磨,看到这篇文章就对了,接下来 Follow me…
操作系统:
所需软件:
除此之外,由于我们还要自己编译mysql驱动,因此还需要下载QT源代码。
一切准备妥当之后开始安装。git不用说了,一路下一步就行了。
安装QT的时候需要选择64bit编译器,要不然编译不过!
然后一路下一步就OK了。安装完成后,为了可以直接在命令行中使用qmake和mingw32-make,我们还需要编译器的路径添加到系统环境变量。
接着就可以安装mysql了,一路下一步就行了,默认就是安装的64bit的connector/c++。
安装完成之后我就迫不及待的试了一下。
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setUserName("root");
db.setPassword("xxxxxxxx");
db.setDatabaseName("testDB");
if(!db.open()) {
qDebug() << db.lastError();
} else {
qDebug() << "Successful connected.";
}
结果出来是下面这样…
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
QSqlError("", "Driver not loaded", "Driver not loaded")
我们可以看到在available drivers中就没有QMYSQL,说明QT5.13默认是没有安装mysql的驱动的。
找了一下QT的sql驱动是在下面这个目录中,
C:\Qt\Qt5.13.1\5.13.1\mingw73_64\plugins\sqldrivers
可以看到该文件夹下面的文件就是对应的available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7,后缀带d的就是debug版本。
因此我们只要找到qtsqlmysql.dll和qtsqlmysqld.dll两个文件因该就可以解决问题了。
接下来就需要将这两个文件编译出来了。解压下载的qt-everywhere-src-5.13.1.zip,路径中不要包含中文和空格!
找到
qt-everywhere-src-5.13.1\qtbase\src\plugins\sqldrivers\mysql
文件夹下面的 mysql.pro,注释掉
//QMAKE_USE += mysql
编译mysql驱动还需要mysql的头文件和库,因此在文件末尾加上
INCLUDEPATH += "C:/Program Files/MySQL/MySQL Server 8.0/include"
LIBS += "C:/Program Files/MySQL/MySQL Server 8.0/lib/libmysql.lib"
注意斜杠和反斜杠。
接下来就可以开始编译了。
在当前目录下右击,选择git bash here,打开shell,输入qmake,WTF?
Info: creating stash file D:\qt-everywhere-src-5.13.1\qtbase\src\plugins\sqldrivers\.qmake.stash
Cannot read D:/qt-everywhere-src-5.13.1/qtbase/src/plugins/sqldrivers/qtsqldrivers-config.pri: No such file or directory
找了一下sqldrivers目录中的确没有这个文件呀…
发现该目录下面有一个sqldriver.pro,尝试运行qmake,qtsqldrivers-config.pri神奇地出现了!再返回到mysql目录中,成功运行qmake!
接着运行mingw32-make编译驱动,不出意外的话,会在
D:\qt-everywhere-src-5.13.1\qtbase\src\plugins\sqldrivers\plugins\sqldrivers
文件夹下看到libqsqlmysql.a、libqsqlmysqld.a、qsqlmysql.dll、qsqlmysqld.dll四个文件,然后运行mingw32-make release-install和mingw32-make debug-install,qsqlmysql.dll和qsqlmysqld.dll将被复制到
C:\Qt\Qt5.13.1\5.13.1\mingw73_64\plugins\sqldrivers
然后我又迫不及待地试了一下,结果…
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
QSqlError("", "Driver not loaded", "Driver not loaded")
不过欣慰的是,这次available drivers 中已经有了QMYSQL,看来离成功已经不远了!
接下来按照网上的方法将
C:\Program Files\MySQL\MySQL Server 8.0\lib\libmysql.dll
拷贝至
C:\Qt\Qt5.13.1\5.13.1\mingw73_64\bin
然后再运行测试程序
Successful connected.
驱动终于加载成功,又可以愉快地玩耍了!