QT 连接MySQL
QT 版本:x86 5.12.6
MySQL版本:x64 8.0.27
注意事项:安装MinGW 必须与MySQL版本一致,即都为x86或x64,文中目录以实际安装地址为准
- 安装完成后,复制MySQL文件 lib目录下libmysql.dll,libmysql.lib 到"D:\QT\5.12.6\mingw73_64\bin"目录
- 在QT目录下找到mysql文件,用QT打开
“D:\QT\5.12.6\Src\qtbase\src\plugins\sqldrivers\mysql\mysql.pro”
修改
\#QMAKE_USE += mysql
添加
INCLUDEPATH += "D:/MySQL/include"
LIBS += "D:/MySQL/lib/libmysql.lib"
DESTDIR = ../mysql/lib/
- 在D盘会出现plugins文件夹,将复制到"D:\QT\5.12.6\mingw73_64\plugins\sqldrivers"文件夹中即可
测试代码:
借鉴作者:Tinkle02
// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <iostream>
#include <QMainWindow>
#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlQuery>
using namespace std;
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void connectMYSQL();
void createDB();
void initDB();
QSqlDatabase database;
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
// main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
qDebug()<<QSqlDatabase::drivers();
w.connectMYSQL();
w.createDB();
w.initDB();
return a.exec();
}
// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent):
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
//连接数据库
void MainWindow::connectMYSQL()
{
cout<<"connect is enter"<<endl;
if (QSqlDatabase::contains("testConnect"))//判断testConnect连接是否存在并连接
{
std::cout<<"connect is run......"<<std::endl;
database = QSqlDatabase::database("testConnect");
}
else //未连接则新建数据库连接
{
database=QSqlDatabase::addDatabase("QMYSQL","testConnect");//创建数据库连接,并为其命名testConnect
database.setHostName("localhost"); //连接数据库主机名,这里需要注意(若填的为”127.0.0.1“,出现不能连接,则改为localhost)
database.setPort(3306); //连接数据库端口号,与设置一致
database.setUserName("root"); //数据库用户名,与设置一致
database.setPassword("muzuki"); //数据库密码,与设置一致
}
if(!database.open())
{
qDebug()<<"fail to connect mysql:"<<database.lastError().text();
return;
}
}
//创建数据库、数据表
void MainWindow::createDB()
{
QString querystring;
//创建数据库
database = QSqlDatabase::database("testConnect");
querystring = "CREATE DATABASE IF NOT EXISTS student_info";
database.exec(querystring);
if (database.lastError().isValid())
{
qDebug()<<"Create database failed."<<database.lastError();
return;
}
//创建数据表student
database.setDatabaseName("student_info");
if(!database.open())
{
qDebug()<<"database open failed";
return;
}
querystring =
"CREATE TABLE IF NOT EXISTS student_info.Student\
(\
Name varchar(20),\
NO varchar(20) primary key,\
Sex varchar(20),\
Tell varchar(20),\
Address varchar(30), \
Hobbies varchar(30)\
)";
database.exec(querystring);//执行创建数据表语句
if (database.lastError().isValid())
{
qDebug()<<"Student table creat failed:" << database.lastError();
return;
}
//支持中文
database.exec("alter table Student convert to character set utf8");
}
//初始化数据库(添加原始值)
void MainWindow::initDB()
{
QSqlQuery query(database);
query.exec("insert into Student values('张三', '2018010235', '男','12116588966','北京市朝阳区幸福小区12#103','篮球,游泳')");
query.exec("insert into Student values('李四', '2018020156', '男','15665487200','湖南省长沙市岳麓区开心小区9#602','足球')");
query.exec("insert into Student values('灵儿', '2018020202', '女','10202020202','江苏省南京市玄武区爱情公寓2#202','Dota')");
if(!query.exec())
{
qDebug() << "Error: Fail to insert ." << query.lastError();
}
}
MainWindow::~MainWindow()
{
delete ui;
}
若依旧无法连接数据库,经过测试可能是未将MySQL/bin目录下添加至PATH变量
-
- 在环境变量中添加如下变量,根据实际安装地址
- 在环境变量中添加如下变量,根据实际安装地址
-
- 将bin目录添加至Path中即可
- 将bin目录添加至Path中即可