当前位置:   article > 正文

Qt连接mysql数据库报错问题解决,终于open success_['qsqlite', 'qodbc', 'qodbc3', 'qpsql', 'qpsql7']

['qsqlite', 'qodbc', 'qodbc3', 'qpsql', 'qpsql7'] qsqldatabase: qmysql drive

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"
  • 1
  • 2
  • 3
  • 4

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 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

双击打开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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

点击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();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

如果驱动成功的话,输出截图如下:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/699808
推荐阅读
相关标签
  

闽ICP备14008679号