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

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 &#xff5c;日常开发中连接Oracle数据库详解 前言一、Oracle 数据库概述1.1 定义与特点1.2 适用场景 二、Java 连接 Oracle 数据库的准备工作2.1 添加 Oracle JDBC 驱动依赖2.2 了解连接信息 三、建立数据库连接3.1 代码示例&#xff08;使用服务名&#xff09;3.2 步骤解…...

头歌 进程管理之二(wait、exec、system的使用)

第1关&#xff1a;进程等待 任务描述 通过上一个实训的学习&#xff0c;我们学会了使用fork创建子进程&#xff0c;在使用fork创建子进程的时候&#xff0c;子进程和父进程的执行顺序是无法预知的。本关我们将介绍如何使得fork创建出来的子进程先执行&#xff0c;随后父进程再…...

详解日志格式配置:XML 与 Spring Boot 配置文件格式

详解日志格式配置&#xff1a;XML 与 Spring Boot 配置文件格式 日志是现代应用程序中不可或缺的一部分&#xff0c;通过定制化日志格式和颜色&#xff0c;开发人员可以更方便地调试和监控应用。本文将深入讲解如何在 XML 配置文件 和 Spring Boot 配置文件 中设置日志格式&am…...

JDK21新特性

目录 虚拟线程&#xff08;JEP 444&#xff09;&#xff1a; 顺序集合&#xff08;JEP 431&#xff09;&#xff1a; 字符串模板&#xff08;JEP 430&#xff09;&#xff1a; 模式匹配的增强&#xff08;JEP 440、441以及443&#xff09;&#xff1a; 结构化并发和作用域值…...

SqlDataAdapter

SqlDataAdapter 是 .NET Framework 和 .NET Core 中提供的一个数据适配器类&#xff0c;属于 System.Data.SqlClient 命名空间&#xff08;或在 .NET 6 中属于 Microsoft.Data.SqlClient 命名空间&#xff09;。它的作用是充当数据源&#xff08;如 SQL Server 数据库&#xff…...

AI赋能:构建安全可信的智能电子档案库

在档案的政策与法规上&#xff0c;《中华人民共和国档案法》2020年修订新增&#xff0c;对电子档案的合法要件、地位和作用、安全管理要求和信息化系统建设等方面作出了明确规定&#xff0c;保障数字资源的安全保存和有效利用。 日前&#xff0c;国家档案局令第22号公布《电子…...

分类预测 | PSO-PNN粒子群优化概率神经网络多特征分类预测

分类预测 | PSO-PNN粒子群优化概率神经网络多特征分类预测 目录 分类预测 | PSO-PNN粒子群优化概率神经网络多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现PSO-PNN粒子群优化概率神经网络多特征分类预测&#xff0c;运行环境Matlab2018b及以…...

AcWing 3416. 时间显示

文章目录 前言代码思路 前言 这种我最担心的就是一些语法格式忘掉了。还有 int ,long long 的数据范围我记得不是很清楚&#xff0c;印象中 int 是 20 亿左右&#xff0c;long long 不行就得用数组来存这个数字了。int,long long数据类型及数值范围。好像没记错&#xff0c;记…...

【软考速通笔记】系统架构设计师⑲——专业英语

文章目录 一、前言二、常用名词三、架构风格四、非功能需求五、应用架构六、软件架构重用 一、前言 笔记目录大纲请查阅&#xff1a;【软考速通笔记】系统架构设计师——导读 二、常用名词 名词翻译architecture架构system系统design设计requirements需求components组件constr…...

java注解(二):注解的解析以及应用场景、用注解和反射模拟junit框架代码演示

目录 1、什么是注解的解析&#xff1f; 2、解析注解的案例 1、自定义一个注解 2、在类和方法上使用自己定义的注解 3、解析注解 3、模拟Junit框架案例 1、自定义一个MyTest注解 2、定义一个测试类&#xff0c;使用自定义的注解 3、写一个启动类 本文章主要讲解什么是注…...

C# 命名空间(Namespace)

文章目录 前言一、命名空间的定义与使用基础&#xff08;一&#xff09;定义语法与规则&#xff08;二&#xff09;调用命名空间内元素 二、using 关键字三、嵌套命名空间 前言 命名空间&#xff08;Namespace&#xff09;在于提供一种清晰、高效的方式&#xff0c;将一组名称与…...

几个Linux系统安装体验: centos7系统服务版

本文介绍CentOS7服务版本的安装。 前言 当前国产操作系统版本众多&#xff0c;但根据笔者多年的实践经验得到的认知&#xff0c;最好能抓住底层逻辑&#xff0c;上下打通打透&#xff0c;拉齐表现和本质&#xff0c;就能在纷扰版本中看得清清楚楚&#xff0c;明明白白&#xf…...

ViT学习笔记(一) 基本的原理和框架结构

原论文地址&#xff1a;https://arxiv.org/pdf/2010.11929 首先大致通读一下原论文&#xff0c;这是很有必要的&#xff0c;但不必完全读懂&#xff0c;因为会有高手给我们解读&#xff0c;比如&#xff1a; 【Transformer系列】深入浅出理解ViT(Vision Transformer)模型-CSD…...

fedora下Jetbrains系列IDE窗口中文乱码解决方法

可以看到窗口右部分的中文内容为小方块。 进入 Settings - Appearance & Behavior - Appearance - Use custom font : Note Sans Mono CJK SC &#xff0c;设置后如下图&#xff1a;...

nginx根据报文里字段转发至不同地址

nginx接收到post请求.请求报文里是一个json字符串&#xff0c;字符串里有个字段id。 根据id不同&#xff0c;转发到不同地址。 如果idaaa,转发到www.aaa.com.test 如果idbbb,转发到www.bbb.com.test 如何配置,请提供一个nginx.conf 要在 Nginx 中根据 POST 请求的 JSON 负载中的…...

使用 html/css 实现 educoder 顶部导航栏的步骤和方法

要使用HTML和CSS实现一个类似于Educoder网站的顶部导航栏&#xff0c;我们可以设计一个响应式、简洁且功能齐全的导航栏。Educoder的顶部导航栏通常包括网站的logo、主要导航项&#xff08;如首页、课程、讨论等&#xff09;、以及用户操作按钮&#xff08;如登录、注册等&…...

EasyExcel导出列表

通过easyexcel导出列表数据 根据列表内容自适应宽高。 文件名冲突&#xff0c;修改文件名递增设置。 依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>${easyexcel.version}</version&…...

【unity小技巧】分享vscode如何开启unity断点调试模式,并进行unity断点调试(2024年最新的方法,实测有效)

文章目录 前言一、前置条件1、已安装Visual Studio Code&#xff0c;并且unity首选项>外部工具>外部脚本编辑器选择为Visual Studio Code [版本号]&#xff0c;2、在Visual Studio Code扩展中搜索Unity&#xff0c;并安装3、同时注意这个插件下面的描述&#xff0c;需要根…...

【JavaScript】Object.keys() 和 Object.values() 的使用示例和相关的简单应用

值是数字的情况&#xff1a; let n 124; Object.keys(n) // [] Object.values(n) // []值是字符串的情况&#xff1a; let s "abc"; Object.keys(s) // [0, 1, 2] Object.values(s) // [a, b, c]值是数组的情况&#xff1a;&#xff08;常用&#xff09; let ar…...

SwiftUI 列表(或 Form)子项中的 Picker 引起导航无法跳转的原因及解决

概述 在 SwiftUI 的界面布局中&#xff0c;列表&#xff08;List&#xff09;和 Form 是我们秃头码农们司空见惯的选择。不过大家是否知道&#xff1a;如果将 Picker 之类的视图嵌入到列表或 Form 的子项中会导致导航操作无法被触发。 从上图可以看到&#xff1a;当在 List 的…...

基于ZYNQ-7000系列的FPGA学习笔记8——呼吸灯

基于ZYNQ-7000系列的FPGA学习笔记8——呼吸灯 1. 实验要求2. 功能分析3. 模块设计4. 波形图5.代码编写6. 代码仿真7. 添加约束文件并分析综合 上期内容&#xff0c;我们学习了按键控制蜂鸣器&#xff0c;这一期我们开始学习呼吸灯 1. 实验要求 控制领航者核心板上的led&#x…...

探索 Python 应用的分层依赖:解决 UOS 环境中的 libvirt-python 安装问题

探索 Python 应用的分层依赖&#xff1a;解决 UOS 环境中的 libvirt-python 安装问题 背景Python 版本升级 问题描述原因分析与解决方案 Python 应用的分层依赖&#xff1a;安装与部署的视角libvirt-python的分层依赖尝试的解决方案 使用编译好的 .whl 文件"嫁接"整个…...

OpenCV-平滑图像

二维卷积(图像滤波) 与一维信号一样&#xff0c;图像也可以通过各种低通滤波器&#xff08;LPF&#xff09;、高通滤波器&#xff08;HPF&#xff09;等进行过滤。LPF 有助于消除噪音、模糊图像等。HPF 滤波器有助于在图像中找到边缘。 opencv 提供了函数 **cv.filter2D()**&…...

解决跨域问题方案

跨域问题在前后端分离架构下尤为常见&#xff0c;是每个 Web 开发者都会遇到的核心问题。本文将通过原理解析、场景剖析、解决方案详解以及最佳实践等多个维度&#xff0c;帮助开发者全面理解并有效应对跨域问题。 目录 **一、跨域的本质****1. 同源策略****2. 同源策略的限制范…...

云计算介绍_3(计算虚拟化——cpu虚拟化、内存虚拟化、io虚拟化、常见集群策略、华为FC)

计算虚拟化 1.计算虚拟化介绍1.1 计算虚拟化 分类&#xff08;cpu虚拟化、内存虚拟化、IO虚拟化&#xff09;1.2 cpu虚拟化1.3 内存虚拟化1.4 IO虚拟化1.5 常见的集群的策略1.6 华为FC 1.计算虚拟化介绍 1.1 计算虚拟化 分类&#xff08;cpu虚拟化、内存虚拟化、IO虚拟化&#…...

软件工程复习记录

基本概念 软件工程三要素&#xff1a;方法、工具、过程 软件开发方法&#xff1a;软件开发所遵循的办法和步骤&#xff0c;以保证所得到的运行系统和支持的文档满足质量要求。 软件开发过程管理 软件生命周期&#xff1a;可行性研究、需求分析、概要设计、详细设计、编码、测…...

俩Nim游戏

1.给定n堆石子&#xff0c;每堆石子有xi快&#xff0c;两位玩家轮流操作&#xff0c;每次操作可以从任意一堆石子中拿走任意数量的石子&#xff08;可以拿完&#xff0c;但不能不拿&#xff09;&#xff0c;最后无法进行操作的人视为失败。 问如果两人都采用最优策略&#xff…...

基于超级电容和电池的新能源汽车能量管理系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 超级电容特性 4.2 电池特性 5.完整工程文件 1.课题概述 基于超级电容和电池的新能源汽车能量管理系统simulink建模与仿真。分析不同车速对应的电池&#xff0c;超级电容充放电变化情况。 2.系统仿…...

数据结构——图(遍历,最小生成树,最短路径)

目录 一.图的基本概念 二.图的存储结构 1.邻接矩阵 2.邻接表 三.图的遍历 1.图的广度优先遍历 2.图的深度优先遍历 四.最小生成树 1.Kruskal算法 2.Prim算法 五.最短路径 1.单源最短路径--Dijkstra算法 2.单源最短路径--Bellman-Ford算法 3.多源最短路径--Floyd-…...

002-NoSQL介绍

目录 一、NoSQL 简介 二、NoSQL 特性 三、NoSQL 的工作原理 四、NoSQL 有哪些类型 五、NoSQL数据库与关系型数据库的区别 六、常见的非关系型数据库NOSQL分类 一、NoSQL 简介 NoSQL,全称为Not Only SQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是…...