Qt 直连Mysql(不使用ODBC)

使用Qt 5.12.12时需要直连Mysql,但是没有提供相应的库文件,这时我们就需要编译Qt中mysql的源码。

  1. 编译mysql源码

(1)在Qt安装目录下,找到这个文件夹D:\Qt\Qt5.12.12\5.12.12\Src\qtbase\src\plugins\sqldrivers\mysql。

(2)双击打开mysql工程,然后选择适当的编译器,安装mysql时是64或者32位,那编译器就选择64或者32位,MinGW或者MSVC均可。这里我使用MinGW730_64bit进行编译。

(3)修改.pro文件,将QMAKE_USE += mysql注释掉,添加如下图所示的几行代码

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)


#这里的路径是MySQL安装路径下的include文件夹哦,记得替换成自己的MySQL安装路径哦

INCLUDEPATH +="C:\Program Files\MySQL\MySQL Server 8.0\include"

#在这里引入静态库,写绝对路径好一点,不容易发生一些莫名其妙的错误(会弄的大佬除外)
#记得替换成自己的路径
LIBS +="C:\Program Files\MySQL\MySQL Server 8.0\lib\libmysql.lib"
#将我们编译好的文件放在这个项目,就是mysql文件夹下的myLib文件夹内
DESTDIR  = ../mysql/myLib/

(4)双击打开qsqldriverbase.pri文件,将第四行注释掉,即#include($ s h a d o w e d (shadowed(shadowed( $PWD)/qtsqldrivers-config.pri),然后添加include(./configure.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

(5)点击构建按钮进行构建,生成4个文件。如下图所示:

(6)将qsqlmysql.dll和qsqlmysqld.dll两个dll文件拷贝到mingw73_64\plugins\sqldrivers中,如下图所示。

(7)测试代码

.pro文件中加上QT += sql

QT += sql

在要使用的头文件或者源文件中加上#include<QSqlDataBase>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

        QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
        db.setHostName("127.0.0.1");  //连接本地主机
        db.setPort(3306);
        db.setDatabaseName("指定的数据库名称");
        db.setUserName("数据库登录名");
        db.setPassword("数据库登录密码");
        bool ok = db.open();
        if (ok){
            QMessageBox::information(this, "infor", "link success");
        }
        else {
            QMessageBox::information(this, "infor", "link failed");
            qDebug()<<"error open database because"<<db.lastError().text();
        }

}

如果测试成功则没问题,如果测试失败,则看(8)。

(8)因为mysql8.0之后有加密,所以要额外添加两个动态库,参考(20条消息) QT有QMYSQL驱动,但是依旧报错“QMYSQL driver not loaded”解决方法_忽而以冬的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值