当前位置: 首页 > article >正文

Connect to Oracle Database with JDBC Driver

1. OverviewThe Oracle Database is one of the most popular relational databases. In this tutorial, we’ll learn how to connect to an Oracle Database using a JDBC Driver.2. The DatabaseTo get us started, we need a database. If we don’t have access to one, let’s either download and install a free version from Oracle Database Software Downloads or use one of the docker images found at Oracle Database Container Images.For this article, let’s build and run a docker image ofOracle Database 23ai (23.5.0).3. Maven SetupNow that we have a database let’s add the required dependency to our project for Oracle’s JDBC driver. We’ll use ojdbc11 to connect to Oracle 23ai:dependency groupIdcom.oracle.database.jdbc/groupId artifactIdojdbc11/artifactId version23.5.0.24.07/version /dependencyCopyThe most recent version of ojdbc11 can be found in the Central Maven Repository. This dependency requires Java 11 or later and is the recommended driver for more recent versions of Java.For legacy support, ojdbc8 is available for Java 8. Oracle also recommends ojdbc10 as the driver for Oracle 19c.4. Connect to Oracle DatabaseTo connect to the database, let’s create anOracleDataSource, Oracle’s implementation of theDataSourceinterface. This is preferable to usingDriverManagersinceDataSourceis more scalable and easier to set up.First, let’s initialize the connection properties and set the properties and the URL in theOracleDataSource. After that, we’ll callgetConnection()to retrieve a new connection:public static Connection getConnection(String databaseUrl, String userName, String password) throws SQLException { var connectionProperties new Properties(); connectionProperties.setProperty(OracleConnection.CONNECTION_PROPERTY_USER_NAME, userName); connectionProperties.setProperty(OracleConnection.CONNECTION_PROPERTY_PASSWORD, password); var oracleDataSource new OracleDataSource(); oracleDataSource.setConnectionProperties(connectionProperties); oracleDataSource.setURL(databaseUrl); return oracleDataSource.getConnection(); }CopyIt should also be noted thatOracleDataSourcehas the methodssetUser()andsetPassword(),which can be used instead ofsetConnectionProperties(). However, it is helpful to note thatOracleConnectionprovides many property names statically, and this is how we would set other properties such as auto-commit, caching, or fetch sizes.To test out ourgetConnection()method, let’s retrieve the username:Test void whenConnectionRetrieved_thenUserNameIsReturned() throws SQLException { var url jdbc:oracle:thin://localhost:1521/FREEPDB1; var userName BAELDUNG; var password baeldung_pw; String retrievedUser null; try (var connection ConnectToOracleDb.getConnection(url, userName, password)) { retrievedUser connection.getMetaData().getUserName(); } assertEquals(userName, retrievedUser); }CopyThis example creates the connection in a try-with-resources block, automatically closing the connection after we’re done.If any mistake is made in the URL, username, or password, we would expect to see an ORA error. For example, ORA-17868 would indicate an unknown host and ORA-01017 indicates a credentials error.5. Optimizing Performance With Connection PoolingThere are many things to consider when optimizing performance. In particular, if you are setting up a web application, consider using a connection pool.A connection pool is a cache of database connections that can be reused.Oracle provides a Universal Connection Pool (ucp11) for Java 11 and up and Java 8. This is an additional dependency on top of the JDBC dependency, but many other libraries, such as Hikari, Tomcat, and Apache Commons DBCP2, are available for connection pooling.6. ConclusionAs we now know, retrieving a connection to the database does not require much effort.

相关文章:

Connect to Oracle Database with JDBC Driver

1. Overview The Oracle Database is one of the most popular relational databases. In this tutorial, we’ll learn how to connect to an Oracle Database using a JDBC Driver. 2. The Database To get us started, we need a database. If we don’t have access to …...

Flutter 实现点击任意位置收起键盘的最佳实践

痛点 在 Flutter 开发中,TextField 聚焦后会弹出键盘,关闭键盘通常需要: 点击系统返回键点击输入框外的空白区域(但很多情况下点击空白区域也没反应)点击其他输入框(键盘会切换到另一个输入框,不…...

Ling-1T万亿参数模型:高效推理新体验

Ling-1T万亿参数模型:高效推理新体验 【免费下载链接】Ling-1T-FP8 项目地址: https://ai.gitcode.com/hf_mirrors/inclusionAI/Ling-1T-FP8 导语:近日,inclusionAI团队正式发布了Ling系列2.0版本的旗舰模型——Ling-1T-FP8&#xff…...

Windows 下 Docker Desktop 安装教程及常用命令(2026 最新)

Windows 安装 Docker 核心是 Docker Desktop WSL2(推荐),家庭版 / 专业版通用,性能好、最稳定,下面是详细步骤。 一、系统与硬件要求 1. 1、系统版本 Windows 10 64 位:家庭 / 专业 / 企业 22H2&#x…...

Iceoryx(冰羚):无锁队列与并发控制的设计与实现3(源码解析)

接上篇设计4: 索引管理层( MpmcIndexQueue / CyclicIndex)Subscriber存储数据使用的是queue,是为了保证数据的读取顺序。MpmcLockFreeQueue 为了满足多个进程同时写的情况,采用了索引数据分离的方案(底层的索引实现为 …...

2026 ASNT-TC-1A 无损检测 Ⅱ/Ⅲ 级认证指南|API/ASME 认证必备 + 报考实操

一、行业刚需:为何 ASNT-TC-1A 资质是工业检测领域的「硬通货」在石油天然气、压力容器、钢结构焊接等工业领域,无损检测(NDT)是产品质量保障的核心环节,而ASNT-TC-1A作为美国无损检测学会制定的人员资格鉴定和认证标准…...

基于 eBPF 与 Python 异步代理的嵌入式 OT 网络微隔离架构实战

前言与业务背景最近在主导一个船舶 OT 网络的底层加固项目,遇到了一个典型的边缘计算资源受限问题。根据最新的网络安全规范(如 IACS UR E27),边缘节点必须具备跨区域流量的深度过滤以及审计日志的防篡改留存能力。如果照搬传统的…...

HarmonyOS6 ArkTS List 设置编辑模式

文章目录一、功能概述二、官方核心知识点1. 编辑模式实现原理2. 列表数据驱动3. 列表项操作三、完整可运行代码四、代码功能详解1. 编辑模式状态控制2. 编辑按钮切换3. 列表项动态显示删除按钮4. 删除列表项5. LazyForEach 高性能渲染五、运行效果总结一、功能概述 List 编辑模…...

4步实现Obsidian插件全中文显示:从技术原理到实践指南

4步实现Obsidian插件全中文显示:从技术原理到实践指南 【免费下载链接】obsidian-i18n 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-i18n Obsidian作为一款强大的知识管理工具,其生态系统依赖于丰富的第三方插件扩展功能。然而&#…...

Eye-in-Hand还是Eye-to-Hand?深入解读OpenCV手眼标定背后的四种经典算法(Tsai, Park, Horaud)

Eye-in-Hand还是Eye-to-Hand?深入解读OpenCV手眼标定背后的四种经典算法 在工业机器人视觉引导系统中,相机与机械臂的精确标定直接决定了整个系统的定位精度。当工程师第一次调用OpenCV的calibrateHandEye()函数时,面对CALIB_HAND_EYE_TSAI、…...

Simulink频域分析避坑指南:如何准确获取谐振频率(含MATLAB代码)

Simulink频域分析实战:谐振频率精准提取方法论与MATLAB实现 在控制系统设计与分析领域,频域特性是评估系统动态性能的核心指标之一。而谐振频率作为频域响应中的关键特征点,直接影响着系统的稳定性和响应速度。然而,许多工程师在使…...

LFM2.5-1.2B-Thinking-GGUF开源可部署:自主可控轻量模型替代方案深度评测

LFM2.5-1.2B-Thinking-GGUF开源可部署:自主可控轻量模型替代方案深度评测 1. 模型概述 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型,专为低资源环境优化设计。该模型采用GGUF格式存储,配合llama.cpp运行时,能…...

# 发散创新:用 Rust实现一个轻量级游戏日引擎的核心调度机制 在现代游戏开发中,**高效的任务调度与资源管理**是性能

发散创新:用 Rust 实现一个轻量级游戏日引擎的核心调度机制 在现代游戏开发中,高效的任务调度与资源管理是性能瓶颈的关键所在。尤其是在“游戏日”这类强调多线程并行处理、实时响应的场景下,传统基于 C 或 Python 的方案往往因内存安全问题…...

开源工具Cowabunga Lite:iOS设备零门槛个性化方案全解析

开源工具Cowabunga Lite:iOS设备零门槛个性化方案全解析 【免费下载链接】CowabungaLite iOS 15 Customization Toolbox 项目地址: https://gitcode.com/gh_mirrors/co/CowabungaLite 在iOS生态系统中,用户对设备个性化的需求与系统封闭性之间始终…...

TAICHI-flet终极排障指南:从新手到高手的完整解决方案

TAICHI-flet终极排障指南:从新手到高手的完整解决方案 【免费下载链接】TAICHI-flet 基于flet的一款windows桌面应用,实现了浏览图片、音乐、小说、漫画、各种资源的功能。 项目地址: https://gitcode.com/GitHub_Trending/ta/TAICHI-flet TAICHI…...

H3C无线调优案例

用户报无线经常掉线,用户现场无线用的H3C 首先登录无线控制器搜集对应接入体验差的AP的诊断日志,从日志中可以看到AP有线上行口的组播广播包数量远远超过了单播报文;没有CRC错误报文,说明网线质量没有问题。接着看:我们…...

Jetson Nano/Xavier NX上,手把手解决Realsense D435i IMU数据丢失的完整配置流程

Jetson Nano/Xavier NX上解决Realsense D435i IMU数据丢失的实战指南 当你兴奋地启动Realsense D435i摄像头,准备获取IMU数据来增强你的机器人项目时,却发现虽然IMU话题存在,但数据流却空空如也——这种挫败感我深有体会。作为在Jetson平台上…...

如何快速下载Google Drive受保护PDF:终极免费解决方案指南

如何快速下载Google Drive受保护PDF:终极免费解决方案指南 【免费下载链接】Google-Drive-PDF-Downloader 项目地址: https://gitcode.com/gh_mirrors/go/Google-Drive-PDF-Downloader 你是否经常遇到Google Drive中那些"仅查看"权限的PDF文件&am…...

保姆级教程:用Cloudreve+Obsidian打造私人云笔记(附WebDAV配置避坑指南)

零基础构建私有知识库:Cloudreve与Obsidian的完美联姻 在信息爆炸的时代,如何高效管理个人知识资产已成为现代人的刚需。想象一下:你正在咖啡馆用iPad记录灵感,回到家打开电脑时这些想法已自动同步;出差途中用手机查阅…...

MBPFan:解决MacBook Linux系统散热难题的智能温控工具

MBPFan:解决MacBook Linux系统散热难题的智能温控工具 【免费下载链接】mbpfan 项目地址: https://gitcode.com/gh_mirrors/mb/mbpfan 当你在Linux系统下使用MacBook处理文档、编写代码或观看视频时,是否遇到过设备突然发烫、风扇噪音忽大忽小的…...

AI辅助开发深度探索:在快马平台上对比评测类qoderwork官网的AI代码生成能力

最近在研究AI辅助开发时,发现一个很有意思的现象:同样是生成一个网页项目,不同AI模型给出的代码风格和实现思路差异很大。这让我萌生了一个想法——能不能搭建一个平台,专门用来对比评测不同AI模型的代码生成能力?就像…...

探索 Carsim 与 Simulink 联合实现三车队列 PID 控制

队列控制 carsim联合simulink pid控制 实现3辆车的队列控制,跟随头车车速变化,保合理车距。在自动驾驶和车辆动力学研究领域,实现多车队列控制,使其能跟随头车车速变化并保持合理车距,是一项极具挑战性但又十分关键的任…...

如何突破内容访问限制?5类开源工具的技术解析与场景适配

如何突破内容访问限制?5类开源工具的技术解析与场景适配 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的数字时代,优质内容往往被各种访问限制所阻…...

AutoHotkey实战:5分钟搞定Mac/Windows跨平台快捷键统一(附完整脚本)

AutoHotkey实战:5分钟搞定Mac/Windows跨平台快捷键统一(附完整脚本) 对于频繁切换Mac和Windows双系统的开发者来说,最令人抓狂的莫过于两种操作系统下完全不同的快捷键体系。特别是Cmd/Ctrl键位的混乱,常常让人在复制粘…...

AsyncSerial:嵌入式非阻塞串口通信实现

1. AsyncSerial 库深度解析:面向嵌入式实时系统的非阻塞串口通信实现 在嵌入式系统开发中,串口(UART/USART)通信因其硬件资源占用少、协议简单、调试便捷等优势,始终是固件层最基础且高频使用的外设接口。然而&#xf…...

动态规划详解:从入门到精通,这四个案例让你彻底掌握DP思想

面试必考、算法进阶的核心,一篇文章帮你打通任督二脉在算法学习的过程中,动态规划(Dynamic Programming,简称DP)绝对是让很多人头疼的一个难点。很多初学者看到DP问题就发怵,其实只要掌握了核心思想&#x…...

轻量级二维码工具性能优化:从加载到部署的全流程实践

轻量级二维码工具性能优化:从加载到部署的全流程实践 【免费下载链接】qrcodejs Cross-browser QRCode generator for javascript 项目地址: https://gitcode.com/gh_mirrors/qr/qrcodejs 二维码生成功能已成为现代Web应用的常见需求,但传统实现方…...

C++vector,智能指针,拷贝构造函数

我将分别介绍 C 中的智能指针、std::vector 动态数组以及拷贝构造函数的概念、用法和适用场景。一、C 智能指针智能指针是用于自动化管理动态分配内存的模板类&#xff0c;位于 <memory> 头文件中。它们通过 RAII&#xff08;Resource Acquisition Is Initialization&…...

EPLAN默认工具栏隐藏功能大揭秘:从复制格式到表格式编辑的实战技巧

EPLAN默认工具栏隐藏功能大揭秘&#xff1a;从复制格式到表格式编辑的实战技巧 在电气设计领域&#xff0c;EPLAN作为行业标杆软件&#xff0c;其默认工具栏中隐藏着许多未被充分发掘的效率利器。这些功能往往被常规操作所掩盖&#xff0c;却能在复杂项目设计中节省大量时间。…...

macOS Unlocker V3.0:在Windows和Linux上免费运行macOS虚拟机的终极解决方案 [特殊字符]

macOS Unlocker V3.0&#xff1a;在Windows和Linux上免费运行macOS虚拟机的终极解决方案 &#x1f680; 【免费下载链接】unlocker 项目地址: https://gitcode.com/gh_mirrors/unlo/unlocker macOS Unlocker V3.0是一款革命性的开源工具&#xff0c;让您能够在Windows或…...