Qt5.15:MinGW64位编译Oracle 19c数据库驱动及代码测试 - 安装时没有选Sources处理办法

0 代码仓库及视频

0.1 代码仓库

OpenSSL_Secure_Data_Transmission_Platform/Module Preparation and Test/13.DBTest/:

https://github.com/Chufeng-Jiang/OpenSSL_Secure_Data_Transmission_Platform/tree/main/Module%20Preparation%20and%20Test/13.DBTest

0.2 视频传送

https://www.bilibili.com/video/BV1Fj411v7P3/?vd_source=3353f83539e46042d8cf76efb177a8e4

09-QT15.5.2版本MinGW64编译Oracle数据库OCCI驱动

1 环境以及条件说明

操作系统:windows10专业版
数据库服务器版本:oracle 19c
oracle instant client版本:19.18
QT版本:5.15.2,且安装的时候没有勾选了源码
QT安装目录:D:\Qt
QT编译套件1:MinGW32/MinGW64(关于32位位与64位问题要与数据库一致)
QT编译套件2:MSVC2019_32/MSVC2019_64(不同的编译套件默认内置的数据库驱动是不一样的,具体看套件的plugins/sqldrivers/目录下的库文件)

2 准备一:下载Oracle 19c驱动,需要下载两个包,注意分x86和x64

2.1 32位

x86下载地址:https://www.oracle.com/database/technologies/instant-client/microsoft-windows-32-downloads.html

① instantclient-basic-nt-19.18.0.0.0dbru.zip

② instantclient-sdk-nt-19.18.0.0.0dbru.zip

2.2 64位

x64下载地址:https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html

① instantclient-basic-windows.x64-19.18.0.0.0dbru.zip

② instantclient-sdk-windows.x64-19.18.0.0.0dbru.zip

2.3 新建目录并解压缩

主目录

D:\ProgramData\QT_Oracle19

在这里插入图片描述

2.4 记录路径

具体需要哪个,需要根据具体情况使用。

2.4.1 x86需要的路径

动态库路径

D:\ProgramData\QT_Oracle19\x86\instantclient_19_20

头文件目录

D:\ProgramData\QT_Oracle19\x86\instantclient_19_20\sdk\include

库文件路径

D:\ProgramData\QT_Oracle19\x86\instantclient_19_20\sdk\lib\msvc -loci

2.4.2 x64需要的路径

动态库路径

D:\ProgramData\QT_Oracle19\x64\instantclient_19_20

头文件目录

D:\ProgramData\QT_Oracle19\x64\instantclient_19_20\sdk\include

库文件路径

D:\ProgramData\QT_Oracle19\x64\instantclient_19_20\sdk\lib\msvc -loci

3 准备二:下载Sources源代码的两种方法

3.1 方法一:

直接逛网下载,并拷贝到QT安装目录
我的是5.12.2版本,因此到对应的目录去下载

https://download.qt.io/archive/qt/5.15/5.15.2/single/

在这里插入图片描述

新建Src目录,拷贝解压缩的文件至本目录

D:\Qt\5.15.2\Src

在这里插入图片描述在这里插入图片描述

3.3 方法二:

使用QT Maintenance

在这里插入图片描述

3.3 进入到oci.pro目录

D:\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers\oci

在这里插入图片描述

3.4 备份oci.pro

在这里插入图片描述

3.5 返回上级目录备份qsqldriverbase.pri

D:\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers

在这里插入图片描述

4 编译驱动

qtcreator打开oci.pro,并对oci.pro的内容进行修改,如下:

  • 原版:
    在这里插入图片描述

4.1 修改oci.pro注意事项

  • 如果编译套件使用的是MinGW32位,那么在选择InstantClient的动态库时,就应该指定32位的动态库、头文件和库文件路径。

  • 如果编译套件使用的是MinGW64位,那么在选择InstantClient的动态库时,就应该指定32位的动态库、头文件和库文件路径。

  • 不推荐使用MSVC编译,MinGW的跨平台性好一点。

4.2 修改oci.pro,使用MinGW64位进行编译

TARGET = qsqloci

HEADERS += $$PWD/qsql_oci_p.h
SOURCES += $$PWD/qsql_oci.cpp $$PWD/main.cpp

#注释该行
#QMAKE_USE += oci

#根据Oracle客户端或者instantclient安装路径和版本指定oci.dll
QMAKE_LFLAGS += D:\ProgramData\QT_Oracle19\x64\instantclient_19_20\oci.dll

#根据Oracle客户端安装路径 指定头文件目录
INCLUDEPATH += D:\ProgramData\QT_Oracle19\x64\instantclient_19_20\sdk\include

#根据Oracle客户端安装路径 指定库文件(.lib)路径
LIBS += -LD:\ProgramData\QT_Oracle19\x64\instantclient_19_20\sdk\lib\msvc -loci

darwin:QMAKE_LFLAGS += -Wl,-flat_namespace,-U,_environ

OTHER_FILES += oci.json

PLUGIN_CLASS_NAME = QOCIDriverPlugin
include(../qsqldriverbase.pri)

4.3 MinGW64构建套件编译

这里可能会出现一个相关的报错,因此需要修改,如果没有则跳过4.3.1:

QT编译Oracle/MySQL等数据库驱动报错:Cannot read qtsqldrivers-config.pri: No such file or directory

4.3.1 QT界面中修改qsqldriverbase.pri

include(./configure.pri)

在这里插入图片描述

4.3.2 选择编译器

在这里插入图片描述

4.4 进行Debug编译

  • 进行组建,组建的时候会提示出错;不用管!
  • 然后点击运行,会提示找不到可执行文件,也不用管!
    最后在QT安装的根目录下,或者在组建目录同级目录下的plugin里面继续找。
    在这里插入图片描述
    在这里插入图片描述

将这三个文件拷贝到
在这里插入图片描述

4.5 代码测试

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlQuery>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    qDebug() << QSqlDatabase::drivers();
    // 添加数据库实例
    QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
    // 设置连接信息
    db.setHostName("192.168.111.133");  // 主机地址
    db.setPort(1521);   // 如果是默认端口, 可以不设置
    db.setDatabaseName("ORCLCDB"); // 数据库名
    db.setUserName("c##beza");
    db.setPassword("123456");
    qDebug() << "准备连接...";

    // 连接数据库
    if(db.open())
    {
        qDebug() << "数据库连接成功";
        // 数据库查询
        QSqlQuery q;
        QString sql = "select * from dept";
        bool bl = q.exec(sql);
        if(!bl)
        {
            qDebug() << "查询失败";
        }
        else
        {
            // 遍历结果
            while(q.next())
            {
                // 取出当前记录中的字段
                qDebug() << "ID:" << q.value("ID").toInt()
                         <<"Name: " << q.value("NAME").toString()
                         <<"Location: " << q.value("LOCATION").toString();
            }
        }
        // 插入数据
        sql = "insert into dept values(3, 'LeAnn', 'Tokyo')";

        QSqlDatabase db1 = QSqlDatabase::database();
        db1.transaction();
        bl = q.exec(sql);
        if(bl==false)
        {
            qDebug() << "插入失败";
            db1.rollback();
        }
        else
        {
            qDebug() << "插入数据成功";
            db1.commit();
        }

    }
    else
    {
        qDebug() << "数据库连接失败";
    }


}

MainWindow::~MainWindow()
{
    delete ui;
}

执行前
在这里插入图片描述执行后
在这里插入图片描述

Release版本需进行Release编译,不再重复。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大大枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值