Available drivers:
"QSQLITE"
"QODBC"
"QODBC3"
"QPSQL"
"QPSQL7"
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
源码下载(若存在,则忽略):
https://download.csdn.net/download/txwtech/89676147
解压到相同目录,5.15之后自行编译驱动
打开mysql.pro进行修改:
可以下载解压版的mysql数据库mysql-5.7.24-winx64。
参考:
https://www.cnblogs.com/txwtech/p/14751496.html
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)
#这个主要是添加.h依赖文件使用
INCLUDEPATH+=D:\mysql-5.7.24-winx64\include\
#添加依赖的.lib文件
LIBS+=D:\mysql-5.7.24-winx64\lib\libmysql.lib
#生成你所需要的dll存放目录
DESTDIR=D:\mysql-5.7.24-winx64\lib\tt
qsqldriverbase.pri
qsqldriverbase.pri
QT = core core-private sql-private
# For QMAKE_USE in the parent projects.
#include($$shadowed($$PWD)/qtsqldrivers-config.pri)
#更方便准确的找到qtsqldrivers-config.pri文件
include(./configure.pri)
PLUGIN_TYPE = sqldrivers
load(qt_plugin)
DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII
文件结构:
使用MSVC编译。
编译完成:
找到4个文件:
拷贝到目录:
D:\Qt5.15.2\5.15.2\msvc2019_64\plugins\sqldrivers
然后D:\mysql-5.7.24-winx64\lib目录的如下两个文件
libmysql.dll和libmysql.lib同时拷贝到qt的D:\Qt5.15.2\5.15.2\msvc2019_64\bin目录,否者报错QMYSQL driver not loaded,这个是解决方法:
编译测试:
连接成功
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QStringList>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
qDebug() << "Available drivers:";
QStringList drivers = QSqlDatabase::drivers(); //获取现在可用的数据库驱动
foreach(QString driver, drivers)
qDebug() << driver;
QSqlDatabase db;
QSqlQuery query;
db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setPort(3306);
db.setDatabaseName("book_store_db");
db.setUserName("root");
db.setPassword("123456");
if (!db.open()) {
qDebug("Sql connect failed.");
qDebug() << db.lastError().text();
} else {
qDebug("Sql connected.");
}
query=QSqlQuery(db);
QString sq="INSERT INTO db_mysql VALUES(0,'tt2021', 123, 'xxxx', 60, 0);";
bool res=query.exec(sq);
if(!res){
qDebug()<<"添加失败";
}else
{
qDebug()<<"添加成功";
}
}
MainWindow::~MainWindow()
{
delete ui;
}