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

在这里插入图片描述

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 = qsqlociHEADERS += $$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\msvcdarwin:QMAKE_LFLAGS += -Wl,-flat_namespace,-U,_environOTHER_FILES += oci.jsonPLUGIN_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.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

因此构建完成后要到指定的目录下的
在这里插入图片描述

4.4 进行Debug编译

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

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

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

4.4 进行Release编译

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/122309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

策略路由和路由策略

目录 策略路由 路由策略 策略路由和路由策略 策略路由 Step1:配置ACL&#xff0c;匹配流量 acl number 2010 rule 10 permit source 192.168.10.0 0.0.0.255 acl number 2020 rule 10 permit source 192.168.20.0 0.0.0.255 Step2:流分类traffic classifier jiaoxue //匹配…

Navicat for MySQL 视图创建使用方法

创建视图步骤&#xff1a; 点击新建&#xff1b;选择视图&#xff1b;点击视图创建工具&#xff1b;可以在左侧拖拽表到工作区&#xff1b;选择表字段进行连线

​Vue3响应式原理

目录 手动收集依赖通知更新 effect()&#xff1a;更改数据后执行&#xff0c;更新依赖该数据的数据&#xff08;依赖&#xff09; track&#xff08;&#xff09;收集依赖的effect()放进dep&#xff08;set去重&#xff09; 更新时触发trigger函数通知dep里所有effect()执行…

uniapp 中添加 vconsole

uniapp 中添加 vconsole 一、安装 vconsole npm i vconsole二、使用 vconsole 在项目的 main.js 文件中添加如下内容 // #ifdef H5 // 提交前需要注释 本地调试使用 import * as vconsole from "vconsole"; new vconsole() // 使用 vconsole // #endif三、成功

Ansible简介

环境 控制节点&#xff1a;Ubuntu 22.04Ansible 2.10.8管理节点&#xff1a;CentOS 8 组成 Ansible环境主要由三部分组成&#xff1a; 控制节点&#xff08;Control node&#xff09;&#xff1a;安装Ansible的节点&#xff0c;在此节点上运行Ansible命令管理节点&#xff…

Android 系统架构

目录 Android 系统架构 1. Android 应用层 2. Android应用框架层 2.1 Activity Manager &#xff08;活动管理器&#xff09; 2.2 Window Manager &#xff08;窗口管理器&#xff09; 2.3 Content Provider (内容提供器) 2.4 View System&#xff08;视图系统&a…

Leetcode刷题详解——搜索插入位置

1. 题目链接&#xff1a;35. 搜索插入位置 2. 题目描述&#xff1a; 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。…

JVM调优(10)JVM的运行时数据区

一、概述 对于 C C 来说&#xff0c;在内存管理领域&#xff0c;JVM既拥有最高的权利&#xff0c;但是同时他们又是从事最基础工作的劳动人员&#xff0c;因为他们担负着每一个对象从开始到结束的维护责任。而对于Java来说&#xff0c;再虚拟机自动内存管理的帮助下&#xff0…

x210项目重新回顾之十七升级到linux4.19.114 +buildroot2018再讨论

代码参考https://github.com/colourfate/x210_bsp/ 他的是linux_4.10(dtb为 s5pv210-x210..dtb)我打算用linux4.19.114(dtb为 s5pv210-smdkv210.dtb) &#xff0c;所以修改build.sh ------------------------------------------------------------------------------ 5 M…

STM32 CAN使用

STM32 CAN使用 简介各种通讯接口对比报文总线上的报文信息表示为几种固定的赖类型数据帧列表模式掩码模式配置CAN配置参数位时序 简介 控制器局域网CAN&#xff08;Controller Area Network)是由德国博世公司为汽车应用而开发的多主机局部网络&#xff0c;用于汽车的监测和控制…

智能水厂运行与调控3D模拟仿真在线展示提高整个系统的协同效应

水厂在生活中的重要性不可忽视。它们提供清洁、安全的水源&#xff0c;满足人们饮用、洗浴、烹饪等基本需求&#xff0c;保障公共卫生&#xff0c;预防疾病传播;同时&#xff0c;水厂也促进经济发展&#xff0c;为工业生产和农业灌溉提供保障&#xff0c;吸引和支持企业的投资和…

phar反序列化学习

PHP反序列化常见的是使用unserilize()进行反序列化&#xff0c;除此之外还有其它的反序列化方法&#xff0c;不需要用到unserilize()。就是用到phar反序列化。 Phar phar文件 Phar是将php文件打包而成的一种压缩文档&#xff0c;类似于Java中的jar包。它有一个特性就是phar文…

React Router初学者入门指南(2023版)

React Router&#xff0c;简单来说&#xff0c;是一个帮助处理React应用程序中导航和路由的库。它是用于管理React中路由的最流行的路由工具。如果你对路由的概念不熟悉&#xff0c;可以将其视为在网站的不同部分之间导航的过程。例如&#xff0c;当你进入网站的“联系我们”部…

Android系统的特性

目录 Android系统的特性 1. 显示布局 2. 数据存储 3. 网络 4. 信息 5. 浏览器 6. 编程语言支持 7. 媒体支持 8. 流媒体支持 9. 硬件支持 10. 多点触控 11.蓝牙 12. 多任务处理 13. 语音功能 14.无线共享功能 15. 截图功能 16. 跨平台 17. 应用程序的安全机制…

Flutter笔记:完全基于Flutter绘图技术绘制一个精美的Dash图标(上)

Flutter笔记 完全基于Flutter绘图技术绘制一个精美的Dart语言吉祥物Dash&#xff08;上&#xff09; 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://…

No authorization token was found

今天遇到了一个问题&#xff0c;我把前后端逻辑都理了一遍&#xff0c;开始怀疑后端&#xff0c;后端肯定没错了&#xff0c;把前端理了一遍&#xff0c;ok前后端没错&#xff0c;我错。登录哪里需要的token&#xff1f;&#xff1f;&#xff1f;&#xff1f;把我搞懵逼了。 测…

[红蓝攻防]MDOG(全新UI重制版)为Xss跨站而生,数据共享,表单劫持,URL重定向

说明 功能Cookie窃取表单劫持(钓鱼账密)重定向流量劫持多平台数据推送钉钉数据推送 运行窗口 ./dist目录下已生成exe文件,双击打开 Cookie窃取 点击运行服务,复制以上的payload,payload怎么变形那么你可已去混淆 payload在页面执行 受害者访问存在xss漏洞的页面时受到攻击,…

Capacitor 打包 h5 到 Android 应用,uniapp https http net::ERR_CLEARTEXT_NOT_PERMITTED

Capacitor 打包 h5 到 Android 应用&#xff0c;uniapp https http net::ERR_CLEARTEXT_NOT_PERMITTED capacitor 官网&#xff1a; https://capacitorjs.com/docs/ 项目上需要做一个 app&#xff0c;而这个 app 是用 uniapp 做的&#xff0c;里面用到了一个依赖 dom 的库&…

Android官方ShapeableImageView描边/圆形/圆角图,xml布局实现

Android官方ShapeableImageView描边/圆形/圆角图&#xff0c;xml布局实现 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.…

IDEA新建maven项目,使用mybatis操作数据库完整过程

IDEA新建maven项目&#xff0c;使用mybatis操作数据库完整过程 一、IDEA新建maven项目二、配置mybatis三、创建表对应实体类四、创建mapper接口五、使用mybatis操作数据库 前提&#xff1a; 这个教程是在maven项目中使用mybatis进行数据库操作&#xff0c;不是在spring boot项目…