赞
踩
1、报错如下:
("QSQLITE", "QODBC", "QODBC3", "QPSQL", "QPSQL7")
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
"Driver not loaded Driver not loaded"
2、问题解决
1)复制mysql文件lib目录下的libmysql.dll和libmysqld.dll两个文件到Qt安装目录mingw73_64\bin文件夹下
报错,无法解决,
此处需要理解连接数据库的原理,Qt连接需要驱动
原因是:Qt安装目录plugins\sqldrivers目录里缺失了和Mysql的连接插件qsqlmysql.dll和qsqlmysqld.dll(注意这两个不一样,多一个d)
所以还是报错。
2)自己编译生成这两个动态链接库
编译之前确定数据库的位数和Qt的位数
32位和64位
本文以64位为例,注意mysql和qt都是64位
首先下载Qt源码(根据自己Qt的版本去下载)
https://download.qt.io/archive/qt/5.12/5.12.12/single/
下载完成后
解压,到下面目录
\qt-everywhere-src-5.12.12\qtbase\src\plugins\sqldrivers\mysql
打开mysql.pro工程文件
有两个文件需要修改
双击mysql.pro
修改,对照如下
TARGET = qsqlmysql HEADERS += $$PWD/qsql_mysql_p.h SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp #QMAKE_USE += mysql OTHER_FILES += mysql.json PLUGIN_CLASS_NAME = QMYSQLDriverPlugin include(../qsqldriverbase.pri) #Mysql的头文件(include)路径,改成自己电脑中的路径 INCLUDEPATH +="E:\Program Files\MySQL\mysql-8.0.18-winx64\include" #MySQl的库文件路径,改成自己电脑中的路径 LIBS +="E:\Program Files\MySQL\mysql-8.0.18-winx64\lib\libmysql.lib" #用来指明编译后的结果输出位置sqldrivers\mysql\mysqlDll DESTDIR = ../mysql/mysqlDll
双击打开qsqldriverbase.pri文件,将第四行注释掉,即#include($ s h a d o w e d ( shadowed( shadowed( $PWD)/qtsqldrivers-config.pri),然后添加include(./configure.pri),保存。对照修改
QT = core core-private sql-private
# For QMAKE_USE in the parent projects.
#include($$shadowed($$PWD)/qtsqldrivers-config.pri)
include(./configure.pri)
PLUGIN_TYPE = sqldrivers
load(qt_plugin)
DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII
点击Qt软件中的构建,生成动态库
将生成的库复制到
mingw73_64\plugins\sqldrivers中
附上测试代码
#include <QCoreApplication> #include <QSqlDatabase> #include <QSqlQuery> #include <QDebug> #include <QString> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); //打开mysql QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); qDebug() << "mysql driver is valid " << db.isValid(); db.setHostName("127.0.0.1"); //mysql服务IP db.setUserName("root"); //用户名 db.setPassword("root"); //密码 db.setDatabaseName("mydata"); //数据库 db.setPort(33077); //端口号 if(db.open()) { qDebug() << "databese open success!!!"; db.close(); } return a.exec(); }
如果驱动成功的话,输出截图如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。