码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Qt5.15:MinGW64位编译Oracle 19c数据库驱动及代码测试 - 安装时没有选Sources处理办法


    文章目录

    • 0 代码仓库及视频
      • 0.1 代码仓库
      • 0.2 视频传送
    • 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.4 进行Debug编译
      • 4.5 代码测试
      • Release版本需进行Release编译,不再重复。

    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
    
    • 1

    在这里插入图片描述

    2.4 记录路径

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

    2.4.1 x86需要的路径

    动态库路径

    D:\ProgramData\QT_Oracle19\x86\instantclient_19_20
    
    • 1

    头文件目录

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

    库文件路径

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

    2.4.2 x64需要的路径

    动态库路径

    D:\ProgramData\QT_Oracle19\x64\instantclient_19_20
    
    • 1

    头文件目录

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

    库文件路径

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

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

    3.1 方法一:

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

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

    在这里插入图片描述

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

    D:\Qt\5.15.2\Src
    
    • 1

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

    3.3 方法二:

    使用QT Maintenance

    在这里插入图片描述

    3.3 进入到oci.pro目录

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

    在这里插入图片描述

    3.4 备份oci.pro

    在这里插入图片描述

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

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

    在这里插入图片描述

    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)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    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)
    
    • 1

    在这里插入图片描述

    4.3.2 选择编译器

    在这里插入图片描述

    4.4 进行Debug编译

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

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

    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;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76

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

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

  • 相关阅读:
    Jenkins自动化部署SpringBoot项目的实现
    CS224W1.1——图机器学习介绍
    职素丨专业的职素训练 让学员转变为职业人
    微信小程序开发 开启
    java整合快手小程序(登陆,支付,结算,退款,手机号授权登陆)
    SpringMVC(3)——REST风格
    使用 Next.js、Langchain 和 OpenAI 构建 AI 聊天机器人
    【Java并发入门】02 Java内存模型:看Java如何解决可见性和有序性问题
    AD软件中的pcbdoc、schdoc等类似一些文件的图标变成了白板解决办法
    Swift宏
  • 原文地址:https://blog.csdn.net/jiangchufeng123/article/details/134098775
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号