Qt5连接MySql8的步骤
我的Qt是5.14.2 64位版本;mysql是8.0.25 64位版本。都已经安装好了。
-
进入mysql安装目录
C:\IDE\mysql8\mysql-8.0.25-winx64\lib
,找到libmysql.dll
,如图。 -
然后把它拷贝到qt目录
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin
下,如图。
-
在qt的安装目录
D:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql
中找到mysql.pro
,如下图所示。
-
然后使用
Qt Creator
打开它,打开如下图。
-
修改
mysql.pro
工程文件,修改如下:
TARGET = qsqlmysql
HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp
# 取消注释在项目中使用 MySQL 库(一定要注释掉!!!)
# QMAKE_USE += mysql
OTHER_FILES += mysql.json
PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
# 设置找到自己【mysql安装目录下的include目录】的路径,编译时会在此路径下查找头文件
INCLUDEPATH += C:/IDE/mysql8/mysql-8.0.25-winx64/include
# 设置自己【mysql库文件的路径和库名称(在mysql安装路径下找到lib目录)】。
# 编译时会在指定路径下查找 MySQL 库文件,并链接到 -lmysql 库
LIBS += -LC:/IDE/mysql8/mysql-8.0.25-winx64/lib -lmysql
# 设置目标文件夹【方便mysql项目编译运行之后自己查找mysql动态连接库】
DESTDIR = C:/Users/kailin/Desktop/test33/
注意事项:
- 一定要注释掉
QMAKE_USE += mysql
; - 自己mysql的安装路径千万不要写错了;
- 目标文件夹看自己,在那里方便就新建在那里;
- 配置运行,注意版本要匹配,mysql是64位的,那么对应的qt也必须是64位的。如图所示。
-
点击执行,之后如果不报错,那么会打开如下窗口。
-
不用管它,我们先找到我们自己的新建的目标文件夹去查看,是否生成了mysql动态链接库。找到
C:/Users/kailin/Desktop/test33/
,查看,一共生成了三个文件,如图。
-
把这三个文件拷贝到qt数据库引擎目录下,比如
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\plugins\sqldrivers
,拷贝之后如图所示。
-
新建qt工程,验证qt是否与mysql连接成功了。工程目录如图所示。
在widget.h
头文件中引入相关依赖。
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QtSql/QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
在wiget.cpp
中编写测试代码。
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); //这里使用的是MySQL的驱动类型,其他驱动类型可以参考Qt的帮助手册
db.setHostName("127.0.0.1");//localhost
db.setPort(3306); //默认端口
db.setDatabaseName("qt_db"); //用户自建数据库名称
db.setUserName("root"); //用户名
db.setPassword("root1234!"); //数据库的密码(如果使用的是MySQL,那就是你登录账号的那个密码)
bool ok = db.open(); //定义一个标志量,返回数据库连接状态
if (ok){
QMessageBox::information(this, "infor", "success");
}
else {
QMessageBox::information(this, "infor", "open failed");
}
}
Widget::~Widget()
{
delete ui;
}
运行项目,会弹出一个信息框提示,如图所示,表示连接成功。