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

文章目录

  • 0 代码仓库
  • 1 环境以及条件说明
  • 2 准备一:下载Oracle 19c驱动,需要下载两个包,注意分x86和x64
    • 2.1 32位
    • 2.2 64位
    • 2.3 新建目录并解压缩
    • 2.4 记录路径
      • 2.4.1 `x86`需要的路径
      • 2.4.2 `x64`需要的路径
  • 3 准备二:下载Sources源代码的两种方法
    • 3.1 方法一:
    • 3.3 方法二:
    • 3.3 进入到oci.pro目录
    • 3.4 备份oci.pro
    • 3.5 返回上级目录备份qsqldriverbase.pri
  • 4 编译驱动
    • 4.1 修改oci.pro注意事项
    • 4.2 修改oci.pro,使用MinGW64位进行编译
    • 4.3 MinGW64构建套件编译
      • 4.3.1 QT界面中修改qsqldriverbase.pri
      • 4.3.2 选择编译器并指定构建目录
        • 4.3.2注意事项
        • 4.3.2
    • 4.4 进行Debug编译
    • 4.5 代码测试
    • 4.4 进行Release编译

0 代码仓库

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

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

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/

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

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

D:\Qt\5.15.2\Src

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

3.3 方法二:

使用QT Maintenance

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

3.3 进入到oci.pro目录

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

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

3.4 备份oci.pro

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

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

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

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

4 编译驱动

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

  • 原版:
    Qt5.15:MinGW64位编译Oracle 19c数据库驱动及代码测试 - 安装时没有选Sources处理办法_第9张图片

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

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)

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

4.3.2 选择编译器并指定构建目录

4.3.2注意事项

我的QT不能自动设置构建目录,所以没有设置好的时候,一直各种莫名其妙的错误…构建目录不能指定在oci的上级文件夹,也不能自己新建一个别的名字的文件夹

4.3.2

我的构建目录是

D:\Qt\5.15.2\mingw81_64\qtbase\src\plugins\sqldrivers\build-oci-Desktop_Qt_5_15_2_MinGW_64bit-Debug

因此构建完成后要到指定的目录下的
Qt5.15:MinGW64位编译Oracle 19c数据库驱动及代码测试 - 安装时没有选Sources处理办法_第11张图片

4.4 进行Debug编译

Qt5.15:MinGW64位编译Oracle 19c数据库驱动及代码测试 - 安装时没有选Sources处理办法_第12张图片将这三个文件拷贝到
Qt5.15:MinGW64位编译Oracle 19c数据库驱动及代码测试 - 安装时没有选Sources处理办法_第13张图片

4.5 代码测试

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 
#include 
#include 

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;
}

执行前
Qt5.15:MinGW64位编译Oracle 19c数据库驱动及代码测试 - 安装时没有选Sources处理办法_第14张图片执行后
Qt5.15:MinGW64位编译Oracle 19c数据库驱动及代码测试 - 安装时没有选Sources处理办法_第15张图片

4.4 进行Release编译

你可能感兴趣的:(数据安全传输基础设置平台项目,数据库,qt,oracle)