注:MySQL和qt的编译环境的位数必须一直,我的是64位
一、下载MySQL(免费社区版)
链接:https://dev.mysql.com/downloads/
二、配置qt
环境:Qt 5.14.1+MySQL8.0.29(ZIP版)+msvc2017_64编译器
Qt从5.12版本后不在自带MySQL数据库的连接驱动,需要手动编译,编译之前你的先安装MySQL,和安装qt源码。默认你已经安装好了MySQL和安装qt源码。
1. 修改mysql.pro
进入qt安装目录,然后找到Src\qtbase\src\plugins\sqldrivers\mysql,
我的路径为:D:\SoftWare\Qt5.14.1\5.14.1\Src\qtbase\src\plugins\sqldrivers\mysql
打开路径下的mysql项目并修改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)
INCLUDEPATH += "C:/Program Files/MySQL/mysql-8.0.29-winx64/include" #mysql头文件
LIBS += "C:/Program Files/MySQL/mysql-8.0.29-winx64/lib/libmysql.lib" #mysql库文件
DESTDIR = C:/Users/LZY/Desktop/mydll # 库生成路径
其中:
"C:/Program Files/MySQL/mysql-8.0.29-winx64/include"
中的mysql-8.0.29-winx64
是将第一步下载的Windows (x86, 64-bit), ZIP Archive解压放入MySQL安装目录下。
Windows (x86, 64-bit), ZIP Archive解压如下图
2. 环境配置
1、按上步修改mysql.pro之后,点击左下角的锤子标志构建项目或者构建—重新构建项目mysql。
注意:不需要qmake,只需要构建
2、构建完成后在第一步设定的路径DESTDIR = C:/Users/LZY/Desktop/mydll # 库生成路径
下会生成qt环境搭建的.dll文件,如下图
复制图片中框出来的库文件到qt安装目录5.14.1\msvc2017_64\plugins\sqldrivers
我的路径为:C:\Qt\Qt5.14.1\5.14.1\msvc2017_64\plugins\sqldrivers
注意:编译时所用的编译器和最后库放的路径要对应起来,例如使用msvc2017_64编译,生成的库也需要放到msvc2017_64路径下的plugins\sqldrivers,使用mingw编译也同理
3、将mysql-8.0.29-winx64(由Windows (x86, 64-bit), ZIP Archive解压得到)目录下的lib下的libmysql.dll和libmysql.lib库文件复制到对应编译器的bin目录下(eg: C:\Qt\Qt5.14.1\5.14.1\msvc2017_64\bin)
注:必须是两个库文件libmysql.dll和libmysql.lib,否则会报如下错误:
QSqlDatabase: QMYSQL driver not loaded
三、验证
创建项目,修改.pro如下:
QT += core gui
QT +=sql //加入sql
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
修改main.cpp如下:
#include <QApplication>
#include <QLabel>
#include <QPushButton>
#include <QHBoxLayout>
#include <QSlider>
#include <QSpinBox>
#include <QSqlError>
#include <QDebug>
#include <QSqlDatabase>
#include <QMessageBox>
#include <QTextStream>
#include <stdio.h>
bool createConnection()
{
qDebug() << "drivers" << QSqlDatabase::drivers();//显示本机已有的数据库驱动
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
// db.setHostName("127.0.0.1"); //连接本地主机
db.setHostName("localhost");//默认
db.setPort(3306);//默认
db.setDatabaseName("数据库名");//自己创建的数据库名
db.setUserName("root");//默认
db.setPassword("密码");//自己创建的密码
bool ok = db.open();
if (ok)
{
qDebug() << "seccuss" ;
return true;
}
else
{
qDebug() << "no seccess" ;
return false;
}
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
if (!createConnection())
return 1;
test w;
w.show();
return a.exec();
}
参考:
http://t.csdn.cn/vnMQC
http://t.csdn.cn/spS8t (32位,注意connect必须是C而不是C++ )
https://www.bilibili.com/video/BV1Jk4y167tt?share_source=copy_web
https://www.bilibili.com/video/BV1mq4y1H73k?share_source=copy_web