前言:本人QT小白一枚,因为项目需要,所以最近要写QT的项目。其中有一个功能需要连接MySQL的数据库。全网都快搜烂了,文章的内容千篇一律,而且毫无卵用,真是是让人非常头疼…所以我决定将自己的失败经验分享给大家。献丑了各位。(示例源码放在最后了)

第一步、首先你电脑得有mysql的数据库,还有就是Qt Creator,如果都没有的话你先去把这俩东西装上了之后再来看这篇文章吧。
第二步、我在很多文章都看见了这句话我看见的第一步
就是在你的项目pro里加入 QT += sql。到这一步没问题。(QT += core gui sql)QT+=多个用空格分割,这样写也可以,因为你的pro文件里可能已经有QT += core gui之类的。

第三歩、
我看见的第二步
这里说在mainwindow.h文件中添加头文件。这个地方对小白真是不友好。小白完全就是照着做,结果还是不行。第三歩现在说有点早,我会放在第四步一起说明。

第四步、

void MainWindow::on_pushButton_clicked()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

    db.setHostName("localhost");

    db.setPort(3306);

    db.setDatabaseName("你的数据库");

    db.setUserName("数据库账号");

    db.setPassword("数据库密码");

    if (!db.open()) {

        qDebug("Sql connect failed.");

        qDebug() << db.lastError().text();

        QMessageBox::warning(nullptr, "警告", "无法连接数据库");

    }
    else
    {
        qDebug("Sql connected.");
        QSqlQuery result = db.exec("select * from station");
        for(int i=0; i<result.size(); i++)
        {
        result.next();
        qDebug() << result.value("station_name").toString()  << '\t' << result.value("station_num").toString() << '\t'
        << result.value("id").toString() << '\t' << result.value("city").toString() << endl;
        }
     }
}

如果第三歩照做的话,到这里的QMessageBox和qDebug就会报错,因为第三歩就没引入他俩的头文件当然报错啊。我展示的这个方法是个升级版。链接成功之后还可以查个表测试一下。我这个方法需要在头文件中引入以下头文件

#include <QSqlDatabase>
#include <QMessageBox>
#include <QDebug>
#include <QSqlError>
#include <QSqlQuery>

到这里你以为就完事了吗?这才刚开始。如果你是欧皇的话就当我没说。

QSqlDatabase: QMYSQ driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7

运行完之后大概率会看见这样的报错。总而言之就是告诉你没mysql驱动,第二行是告诉你你有这些驱动,仔细看一下就是没有MYSQL的。

检查QT目录中Qt\Qt5.14.2\5.14.2\mingw73_64\plugins\sqldrivers目录下,观察是否存在qsqlmysql.dll文件。如果没有就需要我们自己去生成一个。
在这里插入图片描述

网上的教程直接告诉你修改mysql.pro 但是找了半天也不知道这个文件在哪。
qt源码下载地址:点击下载
在这里插入图片描述
找到适合自己的源码进行下载,我的是5.14.2版本。(下载路径不能有中文! 不然生成不了!)
下载完之后,找到5.14.2\qt-everywhere-src5.14.2\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
# !!你安装的mysql的lib路径
LIBS += -L $$quote(E:/mysql/mysql/mysql-8.0.23-winx64/lib) -llibmysql
# !!你安装的mysql的include路径
INCLUDEPATH += $$quote(E:/mysql/mysql/mysql-8.0.23-winx64/include)
# !!你安装的mysql的include路径
DEPENDPATH += $$quote(E:/mysql/mysql/mysql-8.0.23-winx64/include)
include(../qsqldriverbase.pri)

下面这个是我改完之后的精神面貌
在这里插入图片描述
改好了之后点这个小锤子构造项目
在这里插入图片描述
或者Ctrl+b构造一下。

这样你会看见mysql的同级目录下多了一个plugins
在这里插入图片描述
在这里插入图片描述

这俩就是我们要mysql驱动。把他俩复制到Qt\Qt5.14.2\5.14.2\mingw73_64\plugins\sqldrivers文件下面。

最后一步、
mysql/lib内的动态库文件libmysql.dll复制,拷贝到Qt\Qt5.14.2\5.14.2\mingw73_64\bin
的文件夹内
在这里插入图片描述
最后执行成功,查出数据。
在这里插入图片描述
**

本人示例源码:点击下载

Logo

本社区面向用户介绍CSDN开发云部门内部产品使用和产品迭代功能,产品功能迭代和产品建议更透明和便捷

更多推荐