前言:本人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文件下面。文章来源:https://uudwc.com/A/ykwyp
最后一步、
将mysql/lib内的动态库文件libmysql.dll复制,拷贝到Qt\Qt5.14.2\5.14.2\mingw73_64\bin
的文件夹内
最后执行成功,查出数据。
**文章来源地址https://uudwc.com/A/ykwyp