JAVA |日常开发中连接Oracle数据库详解


JAVA |日常开发中连接Oracle数据库详解
- 前言
- 一、Oracle 数据库概述
- 1.1 定义与特点
- 1.2 适用场景
- 二、Java 连接 Oracle 数据库的准备工作
- 2.1 添加 Oracle JDBC 驱动依赖
- 2.2 了解连接信息
- 三、建立数据库连接
- 3.1 代码示例(使用服务名)
- 3.2 步骤解析
- 四、执行 SQL 语句
- 4.1 创建表
- 4.2 插入数据
- 4.3 查询数据
- 五、异常处理与资源管理
- 5.1 异常处理
- 5.2 资源管理
- 结束语
- 优质源码分享
JAVA |日常开发中连接Oracle数据库详解,在日常的Java开发中,连接Oracle数据库是一个至关重要的任务,特别是在企业级应用中。Oracle数据库以其强大的性能、高可用性和丰富的功能而著称,广泛应用于各种业务场景。本文将详细介绍如何在Java中连接Oracle数据库,包括所需的库、连接步骤、执行SQL语句、处理结果集以及事务管理等关键方面。
前言
在数字浪潮汹涌澎湃的时代,程序开发宛如一座神秘而宏伟的魔法城堡,矗立在科技的浩瀚星空中。代码的字符,似那闪烁的星辰,按照特定的轨迹与节奏,组合、交织、碰撞,即将开启一场奇妙且充满无限可能的创造之旅。当空白的文档界面如同深邃的宇宙等待探索,程序员们则化身无畏的星辰开拓者,指尖在键盘上轻舞,准备用智慧与逻辑编织出足以改变世界运行规则的程序画卷,在 0 和 1 的二进制世界里,镌刻下属于人类创新与突破的不朽印记。
一、Oracle 数据库概述
1.1 定义与特点
Oracle 是一款功能强大的关系型数据库管理系统,具有高可靠性、高性能、高安全性等诸多优点。它支持大规模数据存储与处理,适用于企业级应用系统,如金融、电信、电商等领域的复杂业务场景,能够有效地管理海量的交易数据、用户信息等。
1.2 适用场景
企业级应用开发: 如企业资源规划(ERP)系统、客户关系管理(CRM)系统等,这些系统需要处理大量复杂的业务数据,Oracle 数据库能够提供强大的数据存储、查询和事务处理功能。
数据仓库与数据分析: 由于 Oracle 数据库对数据的高效存储和管理能力,它被广泛应用于构建数据仓库,用于存储和分析海量的历史数据,为企业决策提供支持。
二、Java 连接 Oracle 数据库的准备工作
2.1 添加 Oracle JDBC 驱动依赖
如果使用 Maven 构建项目,需要添加 Oracle JDBC 驱动依赖。不过,Oracle JDBC 驱动的下载和使用需要遵循 Oracle 的许可协议。以下是添加依赖的一般步骤:
首先,从 Oracle 官方网站下载适用于你的 Oracle 数据库版本的 JDBC 驱动(如ojdbc8.jar用于 Oracle Database 12c 及以上版本)。
然后,在 Maven 项目的pom.xml文件中,添加本地依赖(假设驱动文件放在项目的lib目录下):
<dependency><groupId>com.oracle.database.jdbc</groupId><artifactId>ojdbc8</artifactId><version>19.3.0.0</version><scope>system</scope><systemPath>${project.basedir}/lib/ojdbc8.jar</systemPath>
</dependency>
注意:这种方式在一些情况下可能会因为许可问题而受到限制,在实际使用中请确保遵循 Oracle 的相关规定。
2.2 了解连接信息
主机地址与端口: 需要知道 Oracle 数据库服务器的主机地址(如localhost如果数据库在本地)和端口号(默认是1521)。
服务名或 SID: Oracle 数据库使用服务名(Service Name)或系统标识符(SID)来标识一个数据库实例。这是连接数据库时必须的信息。
用户名和密码: 用于验证用户身份,以获取对数据库的访问权限。
三、建立数据库连接
3.1 代码示例(使用服务名)
以下是一个简单的 Java 代码片段,用于建立与 Oracle 数据库的连接(假设使用服务名连接):
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class OracleConnectionExample {public static void main(String[] args) {try {// 加载Oracle JDBC驱动Class.forName("oracle.jdbc.driver.OracleDriver");// 建立连接,这里假设服务名为ORCLCDB,用户名是system,密码是passwordString url = "jdbc:oracle:thin:@localhost:1521:ORCLCDB";Connection connection = DriverManager.getConnection(url, "system", "password");System.out.println("成功连接到Oracle数据库");// 关闭连接connection.close();} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();}}
}
3.2 步骤解析
- 加载驱动: Class.forName(“oracle.jdbc.driver.OracleDriver”)语句用于加载 Oracle 的 JDBC 驱动。在较新的 JDBC 版本中,这一步骤可能不是必需的,但为了兼容性,通常还是会包含这一步。
- 建立连接: 通过DriverManager.getConnection方法建立连接。url参数是连接字符串,其中jdbc:oracle:thin:@是固定的前缀,localhost是主机地址,1521是端口号,ORCLCDB是服务名。后面两个参数分别是用户名和密码。
- 关闭连接: 在完成数据库操作后,使用connection.close()关闭连接,释放资源。
四、执行 SQL 语句
4.1 创建表
示例代码如下,用于在 Oracle 数据库中创建一个简单的employees表:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class CreateTableExample {public static void main(String[] args) {try {Class.forName("oracle.jdbc.driver.OracleDriver");String url = "jdbc:oracle:thin:@localhost:1521:ORCLCDB";Connection connection = DriverManager.getConnection(url, "system", "password");Statement statement = connection.createStatement();String sql = "CREATE TABLE employees (" +"id NUMBER(10) PRIMARY KEY," +"name VARCHAR2(100)," +"age NUMBER(3))";statement.executeUpdate(sql);System.out.println("表创建成功");statement.close();connection.close();} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();}}
}
在这里,通过connection.createStatement()创建一个Statement对象,用于执行 SQL 语句。executeUpdate方法用于执行创建表的 SQL 语句,因为这是一个会修改数据库结构的操作(如创建、修改、删除表等)。
4.2 插入数据
以下是向employees表中插入数据的示例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class InsertDataExample {public static void main(String[] args) {try {Class.forName("oracle.jdbc.driver.OracleDriver");String url = "jdbc:oracle:thin:@localhost:1521:ORCLCDB";Connection connection = DriverManager.getConnection(url, "system", "password");Statement statement = connection.createStatement();String sql = "INSERT INTO employees (id, name, age) VALUES (1, 'John', 30)";statement.executeUpdate(sql);System.out.println("数据插入成功");statement.close();connection.close();} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();}}
}
同样使用executeUpdate方法执行插入数据的 SQL 语句,将一个员工信息插入到employees表中。
4.3 查询数据
示例代码用于从employees表中查询数据:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class QueryDataExample {public static void main(String[] args) {try {Class.forName("oracle.jdbc.driver.OracleDriver");String url = "jdbc:oracle:thin:@localhost:1521:ORCLCDB";Connection connection = DriverManager.getConnection(url, "system", "password");Statement statement = connection.createStatement();String sql = "SELECT * FROM employees";ResultSet resultSet = statement.executeQuery(sql);while (resultSet.next()) {int id = resultSet.getInt("id");String name = resultSet.getString("name");int age = resultSet.getInt("age");System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age);}resultSet.close();statement.close();connection.close();} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();}}
}
这里通过executeQuery方法执行查询语句,返回一个ResultSet对象,用于存储查询结果。通过while (resultSet.next())循环遍历ResultSet,并使用getInt、getString等方法获取每一行的数据。
五、异常处理与资源管理
5.1 异常处理
在与数据库交互的过程中,可能会出现多种异常,如SQLException(数据库操作异常)、ClassNotFoundException(找不到 JDBC 驱动类)等。在代码中,应该使用try - catch块来捕获这些异常,并进行适当的处理,例如打印错误信息或者进行一些回滚操作。
5.2 资源管理
数据库连接、Statement对象和ResultSet对象等都是有限的资源,在使用完毕后应该及时关闭,以释放资源。可以使用try - with - resources语句(从 Java 7 开始支持)来自动关闭这些资源。例如:
try (Connection connection = DriverManager.getConnection(url, "system", "password");Statement statement = connection.createStatement();ResultSet resultSet = statement.executeQuery(sql)) {// 数据库操作代码
} catch (SQLException e) {e.printStackTrace();
}
在try语句块结束后,connection、statement和resultSet对象会自动关闭,即使在操作过程中出现异常。
结束语
亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。
愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。
至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。

优质源码分享
-
【百篇源码模板】html5各行各业官网模板源码下载
-
【模板源码】html实现酷炫美观的可视化大屏(十种风格示例,附源码)
-
【VUE系列】VUE3实现个人网站模板源码
-
【HTML源码】HTML5小游戏源码
-
【C#实战案例】C# Winform贪吃蛇小游戏源码

💞 关注博主 带你实现畅游前后端
🏰 大屏可视化 带你体验酷炫大屏
💯 神秘个人简介 带你体验不一样得介绍
🎀 酷炫邀请函 带你体验高大上得邀请
① 🉑提供云服务部署(有自己的阿里云);
② 🉑提供前端、后端、应用程序、H5、小程序、公众号等相关业务;
如🈶合作请联系我,期待您的联系。
注:本文撰写于CSDN平台,作者:xcLeigh(所有权归作者所有) ,https://blog.csdn.net/weixin_43151418,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。
亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(评论),博主看见后一定及时给您答复,💌💌💌
原文地址:https://blog.csdn.net/weixin_43151418/article/details/144188917(防止抄袭,原文地址不可删除)
相关文章:
JAVA |日常开发中连接Oracle数据库详解
JAVA |日常开发中连接Oracle数据库详解 前言一、Oracle 数据库概述1.1 定义与特点1.2 适用场景 二、Java 连接 Oracle 数据库的准备工作2.1 添加 Oracle JDBC 驱动依赖2.2 了解连接信息 三、建立数据库连接3.1 代码示例(使用服务名)3.2 步骤解…...
头歌 进程管理之二(wait、exec、system的使用)
第1关:进程等待 任务描述 通过上一个实训的学习,我们学会了使用fork创建子进程,在使用fork创建子进程的时候,子进程和父进程的执行顺序是无法预知的。本关我们将介绍如何使得fork创建出来的子进程先执行,随后父进程再…...
详解日志格式配置:XML 与 Spring Boot 配置文件格式
详解日志格式配置:XML 与 Spring Boot 配置文件格式 日志是现代应用程序中不可或缺的一部分,通过定制化日志格式和颜色,开发人员可以更方便地调试和监控应用。本文将深入讲解如何在 XML 配置文件 和 Spring Boot 配置文件 中设置日志格式&am…...
JDK21新特性
目录 虚拟线程(JEP 444): 顺序集合(JEP 431): 字符串模板(JEP 430): 模式匹配的增强(JEP 440、441以及443): 结构化并发和作用域值…...
SqlDataAdapter
SqlDataAdapter 是 .NET Framework 和 .NET Core 中提供的一个数据适配器类,属于 System.Data.SqlClient 命名空间(或在 .NET 6 中属于 Microsoft.Data.SqlClient 命名空间)。它的作用是充当数据源(如 SQL Server 数据库ÿ…...
AI赋能:构建安全可信的智能电子档案库
在档案的政策与法规上,《中华人民共和国档案法》2020年修订新增,对电子档案的合法要件、地位和作用、安全管理要求和信息化系统建设等方面作出了明确规定,保障数字资源的安全保存和有效利用。 日前,国家档案局令第22号公布《电子…...
分类预测 | PSO-PNN粒子群优化概率神经网络多特征分类预测
分类预测 | PSO-PNN粒子群优化概率神经网络多特征分类预测 目录 分类预测 | PSO-PNN粒子群优化概率神经网络多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现PSO-PNN粒子群优化概率神经网络多特征分类预测,运行环境Matlab2018b及以…...
AcWing 3416. 时间显示
文章目录 前言代码思路 前言 这种我最担心的就是一些语法格式忘掉了。还有 int ,long long 的数据范围我记得不是很清楚,印象中 int 是 20 亿左右,long long 不行就得用数组来存这个数字了。int,long long数据类型及数值范围。好像没记错,记…...
【软考速通笔记】系统架构设计师⑲——专业英语
文章目录 一、前言二、常用名词三、架构风格四、非功能需求五、应用架构六、软件架构重用 一、前言 笔记目录大纲请查阅:【软考速通笔记】系统架构设计师——导读 二、常用名词 名词翻译architecture架构system系统design设计requirements需求components组件constr…...
java注解(二):注解的解析以及应用场景、用注解和反射模拟junit框架代码演示
目录 1、什么是注解的解析? 2、解析注解的案例 1、自定义一个注解 2、在类和方法上使用自己定义的注解 3、解析注解 3、模拟Junit框架案例 1、自定义一个MyTest注解 2、定义一个测试类,使用自定义的注解 3、写一个启动类 本文章主要讲解什么是注…...
C# 命名空间(Namespace)
文章目录 前言一、命名空间的定义与使用基础(一)定义语法与规则(二)调用命名空间内元素 二、using 关键字三、嵌套命名空间 前言 命名空间(Namespace)在于提供一种清晰、高效的方式,将一组名称与…...
几个Linux系统安装体验: centos7系统服务版
本文介绍CentOS7服务版本的安装。 前言 当前国产操作系统版本众多,但根据笔者多年的实践经验得到的认知,最好能抓住底层逻辑,上下打通打透,拉齐表现和本质,就能在纷扰版本中看得清清楚楚,明明白白…...
ViT学习笔记(一) 基本的原理和框架结构
原论文地址:https://arxiv.org/pdf/2010.11929 首先大致通读一下原论文,这是很有必要的,但不必完全读懂,因为会有高手给我们解读,比如: 【Transformer系列】深入浅出理解ViT(Vision Transformer)模型-CSD…...
fedora下Jetbrains系列IDE窗口中文乱码解决方法
可以看到窗口右部分的中文内容为小方块。 进入 Settings - Appearance & Behavior - Appearance - Use custom font : Note Sans Mono CJK SC ,设置后如下图:...
nginx根据报文里字段转发至不同地址
nginx接收到post请求.请求报文里是一个json字符串,字符串里有个字段id。 根据id不同,转发到不同地址。 如果idaaa,转发到www.aaa.com.test 如果idbbb,转发到www.bbb.com.test 如何配置,请提供一个nginx.conf 要在 Nginx 中根据 POST 请求的 JSON 负载中的…...
使用 html/css 实现 educoder 顶部导航栏的步骤和方法
要使用HTML和CSS实现一个类似于Educoder网站的顶部导航栏,我们可以设计一个响应式、简洁且功能齐全的导航栏。Educoder的顶部导航栏通常包括网站的logo、主要导航项(如首页、课程、讨论等)、以及用户操作按钮(如登录、注册等&…...
EasyExcel导出列表
通过easyexcel导出列表数据 根据列表内容自适应宽高。 文件名冲突,修改文件名递增设置。 依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>${easyexcel.version}</version&…...
【unity小技巧】分享vscode如何开启unity断点调试模式,并进行unity断点调试(2024年最新的方法,实测有效)
文章目录 前言一、前置条件1、已安装Visual Studio Code,并且unity首选项>外部工具>外部脚本编辑器选择为Visual Studio Code [版本号],2、在Visual Studio Code扩展中搜索Unity,并安装3、同时注意这个插件下面的描述,需要根…...
【JavaScript】Object.keys() 和 Object.values() 的使用示例和相关的简单应用
值是数字的情况: let n 124; Object.keys(n) // [] Object.values(n) // []值是字符串的情况: let s "abc"; Object.keys(s) // [0, 1, 2] Object.values(s) // [a, b, c]值是数组的情况:(常用) let ar…...
SwiftUI 列表(或 Form)子项中的 Picker 引起导航无法跳转的原因及解决
概述 在 SwiftUI 的界面布局中,列表(List)和 Form 是我们秃头码农们司空见惯的选择。不过大家是否知道:如果将 Picker 之类的视图嵌入到列表或 Form 的子项中会导致导航操作无法被触发。 从上图可以看到:当在 List 的…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
