Linux环境下Java如何连接Oracle数据库?

在Linux环境下,Java程序连接Oracle数据库是企业级开发中的常见需求,需完成环境准备、驱动配置、代码编写及问题排查等步骤,下面详细介绍具体流程。

linux java如何连接oracle

环境准备

首先需确保Linux系统、Java开发环境及Oracle数据库正常运行,推荐使用CentOS 7+或Ubuntu 18.04+系统,安装JDK 1.8/11/17(需与Oracle JDBC驱动版本匹配),并确认Oracle数据库(11g/12c/19c/21c)已启动监听服务,可通过命令检查:

  • 查看JDK版本:java -version
  • 检查Oracle监听状态:lsnrctl status,若未启动则执行lsnrctl start

JDBC驱动配置

Oracle JDBC驱动是Java连接数据库的核心组件,需根据数据库版本和JDK版本选择对应驱动(如ojdbc8.jar、ojdbc11.jar),可通过Oracle官网下载,或使用Maven/Gradle管理依赖。

Maven依赖配置(以ojdbc8为例):

<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>19.3.0.0</version> <!-- 需匹配Oracle数据库版本 -->
</dependency>

若为非Maven项目,需手动下载驱动jar包,并将其置于项目lib目录,编译时通过-cp参数指定路径:

linux java如何连接oracle

javac -cp ./lib/ojdbc8.jar:. YourClass.java

Java代码实现

连接Oracle的核心步骤包括加载驱动、获取连接、执行SQL及释放资源,以下为完整示例代码:

import java.sql.*;
public class OracleConnTest {
    public static void main(String[] args) {
        // 连接字符串格式:jdbc:oracle:thin:@//主机:端口/服务名
        String url = "jdbc:oracle:thin:@//192.168.1.100:1521/orcl";
        String user = "scott";
        String password = "tiger";
        try (Connection conn = DriverManager.getConnection(url, user, password);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT * FROM emp WHERE rownum <= 5")) {
            System.out.println("EMPNOtENAME");
            while (rs.next()) {
                System.out.println(rs.getInt("EMPNO") + "t" + rs.getString("ENAME"));
            }
        } catch (SQLException e) {
            System.err.println("连接失败: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

说明

  • 连接字符串中表示TCP直连,避免依赖本地tnsnames.ora文件;
  • 使用try-with-resources自动关闭ConnectionStatementResultSet,防止资源泄漏;
  • 服务名(Service Name)和SID(系统标识符)需根据Oracle数据库配置选择,可通过sqlplus / as sysdba执行SELECT instance_name FROM v$instance查看SID,或SELECT value FROM v$parameter WHERE name = 'service_names'查看服务名。

常见问题排查

  1. ClassNotFoundException:驱动jar包未加入classpath,或Maven依赖未下载成功,检查项目lib目录是否存在驱动jar,或执行mvn clean install更新依赖。
  2. IO异常:Network Adapter unable to establish connection
    • 检查防火墙是否开放1521端口(firewall-cmd --list-ports确认);
    • 确认Oracle监听是否启动(lsnrctl status),若未启动则执行lsnrctl start
    • 验证主机名/IP是否正确,可通过telnet 目标IP 1521测试网络连通性。
  3. ORA-01017: invalid username/password:确认数据库用户名、密码是否正确,以及用户是否有远程连接权限(GRANT CONNECT TO scott)。

Oracle数据库版本与JDBC驱动对应表

Oracle数据库版本 推荐JDBC驱动版本 适用JDK版本
11g R2 ojdbc6.jar/ojdbc8.jar 6/1.8
12c R1/R2 ojdbc8.jar 8+
19c/21c ojdbc11.jar 11+

连接字符串格式示例

场景 连接字符串格式 说明
使用服务名(推荐) jdbc:oracle:thin:@//主机:端口/服务名 适用于Oracle 10g及以上,无需本地配置
使用SID jdbc:oracle:thin:@主机:端口:SID 适用于旧版Oracle(如9i)

FAQs

Q1: Linux下连接Oracle时提示“ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务”,如何解决?
A: 该错误通常因服务名/SID配置错误或监听未注册服务导致,检查tnsnames.ora文件中的服务名是否与数据库实例名一致,或执行lsnrctl services查看监听器注册的服务列表,若使用动态注册(默认),确保数据库实例已启动(sqlplus / as sysdba执行startup)。

linux java如何连接oracle

Q2: Java程序在Linux服务器上运行正常,但在其他Linux服务器上连接Oracle超时,可能的原因是什么?
A: 可能原因包括:(1)目标服务器防火墙未开放1521端口,需执行firewall-cmd --add-port=1521/tcp --permanent并重载;(2)网络路由问题,使用traceroute 目标IP检查网络路径;(3)Oracle监听绑定IP为127.0.0.1,需修改$ORACLE_HOME/network/admin/listener.ora,将HOST = localhost改为HOST = 0.0.0.0并重启监听。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/32818.html

(0)
酷番叔酷番叔
上一篇 2025年9月30日 01:23
下一篇 2025年9月30日 01:46

相关推荐

  • 如何在linux中安装软件

    在Linux系统中,安装软件与Windows的“双击exe”模式差异较大,其核心依赖“包管理器”和软件源,同时支持源码编译、第三方工具等多种方式,不同发行版采用的包管理器不同,需根据系统选择合适方法,以下是详细步骤和注意事项,通过包管理器安装(最主流方式)包管理器是Linux发行版自带的软件管理工具,能自动处理……

    2025年8月29日
    22000
  • Linux设备驱动操作如何掌握?关键步骤与实践指南

    Linux设备驱动是内核与硬件设备之间的核心桥梁,负责抽象硬件细节,为上层应用提供统一的设备访问接口,驱动开发需遵循内核编程规范,涉及模块机制、设备模型、中断处理、内存管理等关键技术,其操作流程可拆解为环境搭建、框架设计、功能实现、资源管理及调试优化等步骤,环境搭建与基础准备开发Linux设备驱动需配置内核开发……

    2025年10月4日
    15000
  • Linux线程退出的常用方法有哪些?如何正确实现与避免问题?

    Linux线程作为操作系统调度的基本单位,其退出机制是并发编程中的核心环节,正确的线程退出不仅能确保程序逻辑的完整性,还能避免资源泄漏、死锁等问题,本文将详细解析Linux线程的多种退出方式、底层原理及注意事项,帮助开发者掌握线程退出的最佳实践,线程退出的核心方式及原理Linux线程(本质为轻量级进程)的退出主……

    2025年9月8日
    17900
  • Linux中sh文件执行的具体步骤和命令是什么?

    .sh文件是Linux系统中常用的Shell脚本文件,它包含一系列可执行的Linux命令,通过将这些命令写入脚本文件,可以实现自动化任务、批量处理操作或复杂逻辑的执行,要正确执行.sh文件,需要理解其执行原理、权限设置、执行方式及常见问题解决方法,以下是详细说明,.sh文件执行的基本原理.sh文件本质上是文本文……

    2025年8月24日
    17300
  • Linux下如何切换中文输入法?

    Linux系统下中文输入法的使用是日常办公和娱乐的基础,与Windows不同,Linux的输入法依赖于输入法框架(Input Method Framework,IMF)和具体的输入法引擎,常见的输入法框架有IBus、Fcitx(及Fcitx5),输入法引擎则包括拼音、五笔、仓颉等,本文将详细介绍Linux系统中……

    2025年10月6日
    19900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信