Win平台qt配置mysql
用于windows平台下基于MSVC的Qt和MySql配置
Qt安装
Qt安装的时候要选择source,用于编译mysql驱动
CDB下载:winsdksetup.exe
需要选择对应MSVC编译器版本
编译qmysql驱动
在Qt的source文件夹在找到mysql.pro工程,具体路径为:${QT_DIR}\Src\qtbase\src\plugins\sqldrivers\mysql
用Qt Creator打开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
include(../qsqldriverbase.pri)
#这个主要是添加.h依赖文件使用
INCLUDEPATH+="C:\Program Files\MySQL\MySQL Server 8.0\include"
#添加依赖的.lib文件
LIBS+="C:\Program Files\MySQL\MySQL Server 8.0\lib\libmysql.lib"
#生成你所需要的dll存放目录
DESTDIR="C:\plugins\sqldrivers"
qsqldriverbase.pri
QT = core core-private sql-private
# For QMAKE_USE in the parent projects.
# include($$shadowed($$PWD)/qtsqldrivers-config.pri)
include(./configure.pri)
PLUGIN_TYPE = sqldrivers
load(qt_plugin)
DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII
修改完成后,选择合适的编译套件(MSVC或者MinGW)构建工程,在输出文件夹里得到了两个dll文件,qsqlmysql.dll和qsqlmysqld.dll
拷贝文件
- qsqlmysql.dll、qsqlmysqld.dll:复制到对应编译器文件夹下,例如:
${QT_DIR}\msvc2017_64\plugins\sqldrivers
- libmysql.dll:从MySQL的安装文件夹下复制到Qt的文件夹下,
C:\Program Files\MySQL\MySQL Server 8.0\lib
到C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin
- libcrypto-3-x64.dll、libssl-3-x64.dll:
C:\Program Files\MySQL\MySQL Server 8.0\bin
到C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin
测试
#include "mainwindow.h" // *****注意****
#include<QSqlDatabase>
#include <QApplication>
#include<QMessageBox>
#include <QSqlError>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w; //*****替换一下*****
w.show();
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1"); //连接本地主机
db.setPort(3306); //端口号,默认的
db.setDatabaseName("mysql"); //数据库名
db.setUserName("root"); //用户
db.setPassword("mysql"); //密码
bool ok = db.open();
if (ok){
QMessageBox::information(0, "infor", "link success");
}
else {
QMessageBox::information(0, "infor", "link failed");
// qDebug()<<"error open database because"<<db.lastError().text();
}
QSqlError error;
error = db.lastError();
if(error.isValid())
{
switch(error.type())
{
case QSqlError::NoError:
qDebug() << "no error";
break;
case QSqlError::ConnectionError:
qDebug() << error.text();
break;
case QSqlError::StatementError:
qDebug() << error.text();
break;
case QSqlError::TransactionError:
qDebug() << error.text();
break;
default:
qDebug() << error.text();
break;
}
}
return a.exec();
}
测试成功: