杰瑞科技汇

Java连接Oracle 11g,配置步骤与常见问题有哪些?

核心思想

Java 连接 Oracle 数据库,本质上是通过一个“翻译官”(即 JDBC 驱动程序)让 Java 程序能够理解并执行 Oracle 数据库能听懂的 SQL 语言。

Java连接Oracle 11g,配置步骤与常见问题有哪些?-图1
(图片来源网络,侵删)

整个过程主要分为以下几步:

  1. 获取 JDBC 驱动:下载 Oracle 提供的 JDBC 驱动程序(一个 .jar 文件)。
  2. 配置环境:将驱动 .jar 文件添加到你的 Java 项目中。
  3. 编写 Java 代码:使用 JDBC API 编写代码,加载驱动、建立连接、执行 SQL、处理结果、关闭资源。

第一步:准备工作

确认 Oracle 11g 服务状态

确保你的 Oracle 11g 数据库服务已经启动,你可以使用 SQL*Plus、PL/SQL Developer 或其他工具连接一下,确认数据库是可访问的。

下载 Oracle JDBC 驱动

这是最关键的一步,你需要从 Oracle 官网下载对应版本的 JDBC 驱动。

  • 访问官网:前往 Oracle 官方的 JDBC 驱动下载页面。

    Java连接Oracle 11g,配置步骤与常见问题有哪些?-图2
    (图片来源网络,侵删)
  • 选择版本:由于你用的是 Oracle 11g,建议下载 Oracle Database 11g Release 2 (11.2) 的 JDBC 驱动,通常这个版本的驱动兼容性最好。

  • 选择文件:在下载页面,找到 "Download" 按钮,点击后会进入一个需要登录/同意许可协议的页面,你需要下载的文件通常是:

    • ojdbc6.jar:用于 Java 6, 7, 8 (推荐,因为最常用且稳定)。
    • ojdbc7.jar:用于 Java 7, 8。
    • ojdbc8.jar:用于 Java 8, 11, 17 (如果你的项目使用的是较新版本的 Java,这个也可以,但 ojdbc6 是最经典的选择)。

    请务必下载 .jar 文件,这是一个 Java 归档文件,里面包含了驱动所需的类。

准备数据库连接信息

你需要从你的 DBA(数据库管理员)或自己配置的数据库中获取以下信息:

Java连接Oracle 11g,配置步骤与常见问题有哪些?-图3
(图片来源网络,侵删)
  • 主机名: 数据库服务器的 IP 地址或域名 ( localhost168.1.100)。
  • 端口号: Oracle 的默认监听端口是 1521
  • SID (System Identifier): 数据库实例的名称,这是 Oracle 11g 最常用的标识方式。orcl, orcl11g 等。
  • 服务名: Oracle 10g 及之后版本引入的概念,有时会和 SID 同时使用,对于 11g,两者通常可以互换,但 SID 更传统。
  • 用户名: 连接数据库的用户名 ( scott, system)。
  • 密码: 对应用户的密码。

第二步:配置项目(添加驱动 JAR)

你需要将下载的 ojdbc6.jar 文件添加到你的 Java 项目中,根据你使用的开发工具,方法略有不同。

使用 Maven (推荐)

这是最现代、最方便的方式,你不需要手动下载和添加 JAR 文件。

  1. 在你的 pom.xml 文件中添加以下依赖,请确保版本号与你下载的驱动版本一致。

    <dependencies>
        <!-- Oracle JDBC Driver for 11g -->
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.4</version> <!-- 请根据你下载的版本修改 -->
        </dependency>
    </dependencies>
  2. 保存 pom.xml 文件,你的 IDE(如 IntelliJ IDEA 或 Eclipse)会自动下载该依赖。

手动添加 JAR (不使用 Maven)

如果你不使用 Maven,需要手动将 JAR 文件添加到项目的类路径中。

  • 在 IntelliJ IDEA 中:

    1. 右键点击你的项目或模块。
    2. 选择 Open Module Settings (或 F4)。
    3. 导航到 Libraries -> 号 -> Java
    4. 找到并选择你下载的 ojdbc6.jar 文件,点击 OK
  • 在 Eclipse 中:

    1. 右键点击你的项目。
    2. 选择 Build Path -> Configure Build Path
    3. Libraries 标签页下,点击 Add External JARs...
    4. 找到并选择你下载的 ojdbc6.jar 文件,点击 Open

第三步:编写 Java 连接代码

这里提供一个完整的、健壮的 Java 连接示例,代码中包含了详细的注释和最佳实践(如使用 try-with-resources 自动关闭资源)。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class OracleJdbcExample {
    // --- 请在这里修改你的数据库连接信息 ---
    private static final String DB_URL = "jdbc:oracle:thin:@localhost:1521:orcl";
    private static final String USER = "scott";
    private static final String PASS = "tiger";
    // -----------------------------------------
    public static void main(String[] args) {
        // 使用 try-with-resources 语句,确保 Connection, Statement, ResultSet 被自动关闭
        try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT * FROM emp WHERE ROWNUM <= 5")) {
            // 检查连接是否成功
            if (conn != null) {
                System.out.println("成功连接到 Oracle 数据库!");
            }
            // 处理查询结果
            System.out.println("\n--- EMP 表前5条记录 ---");
            while (rs.next()) {
                // 通过列名获取数据,更安全、可读性更好
                int empno = rs.getInt("EMPNO");
                String ename = rs.getString("ENAME");
                String job = rs.getString("JOB");
                int mgr = rs.getInt("MGR");
                java.sql.Date hiredate = rs.getDate("HIREDATE");
                double sal = rs.getDouble("SAL");
                double comm = rs.getDouble("COMM");
                int deptno = rs.getInt("DEPTNO");
                System.out.println("EMPNO: " + empno + ", ENAME: " + ename + ", JOB: " + job + 
                                   ", HIREDATE: " + hiredate);
            }
        } catch (SQLException e) {
            // 捕获并打印 SQL 异常
            System.err.println("连接数据库或执行查询时出错!");
            e.printStackTrace();
        }
        System.out.println("\n程序执行完毕。");
    }
}

代码解析

  1. 驱动加载 (隐式)

    • 在 JDBC 4.0 (Java 6+) 之后,Class.forName() 已经不再需要,只要你将 ojdbc6.jar 放在类路径中,DriverManager 在尝试获取连接时会自动找到并加载 Oracle 驱动。
  2. 数据库 URL

    • jdbc:oracle:thin::这是 JDBC URL 的协议部分,thin 表示使用 Oracle 的纯 Java 驱动(无需客户端库)。
    • @localhost:1521:orcl:这是连接描述符。
      • 之后是主机名。
      • 之后是端口号。
      • 最后一个 之后是 SID
    • 注意:如果你的数据库配置了服务名,URL 可能会是 jdbc:oracle:thin:@localhost:1521:orcl.example.com (服务名)。
  3. 获取连接

    • DriverManager.getConnection(DB_URL, USER, PASS) 是核心方法,它尝试使用提供的 URL、用户名和密码建立连接。
  4. 执行查询

    • conn.createStatement() 创建一个 Statement 对象,用于执行 SQL 语句。
    • stmt.executeQuery("...") 执行一个查询,返回一个 ResultSet 对象,它就像一个指向查询结果的游标。
  5. 处理结果集

    • rs.next() 将游标移动到下一行,如果存在下一行则返回 true
    • rs.getString("ENAME") 等方法根据列名获取该行对应列的值。
  6. 资源关闭 (最佳实践)

    • try-with-resources 语句确保了 Connection, Statement, 和 ResultSet 在代码块执行完毕后(无论是否发生异常)都会被自动调用 close() 方法,从而释放数据库资源,这是防止资源泄漏的关键。

第四步:常见问题与解决方案

问题 1:java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

  • 原因:JVM 在类路径中找不到 Oracle 驱动的类,这通常是因为 ojdbc6.jar 没有被正确添加到项目的类路径中。
  • 解决方案
    1. 检查 ojdbc6.jar 是否确实在你的项目库中。
    2. 如果你使用的是 Maven,确保 pom.xml 中的依赖正确,Maven 已经重新加载了项目。
    3. 在 IDE 中,确保你执行的是包含了正确库的配置(IntelliJ 中的 "Artifacts" 或 "Run/Debug Configuration")。

问题 2:java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@...

  • 原因:URL 的格式不正确,或者驱动没有被正确加载。
  • 解决方案
    1. 仔细检查 URL:确保 jdbc:oracle:thin:@host:port:sid 的格式完全正确,特别是主机、端口和 SID。
    2. 显式加载驱动(调试用):虽然通常不需要,但可以尝试在获取连接前显式加载驱动,这有时能帮助定位问题:
      Class.forName("oracle.jdbc.driver.OracleDriver");
      Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);

问题 3:java.net.ConnectException: Connection refusedIO Exception: The Network Adapter could not establish the connection

  • 原因:这是最常见的问题,表示你的 Java 程序无法连接到指定的 Oracle 服务器。
  • 解决方案
    1. 检查 Oracle 服务:确保 Oracle 的监听器服务已经启动,在 Windows 上,检查 "OracleOraDb11g_home1TNSListener" 服务是否正在运行,在 Linux 上,使用 lsnrctl status 命令。
    2. 检查防火墙:确保运行数据库的机器的防火墙允许来自你 Java 程序所在机器的 1521 端口的入站连接。
    3. 检查监听器配置:登录到数据库服务器,使用 netca 或直接编辑 listener.ora 文件,确保监听器正在监听正确的 IP 地址和端口。
    4. 检查 TNSnames.ora (可选):如果你在客户端机器上配置了 tnsnames.ora 文件,确保其中的条目与你的 URL 匹配,但对于简单的 thin 连接,通常不需要这个文件。

问题 4:ORA-01017: invalid username/password; logon denied

  • 原因:用户名或密码错误。
  • 解决方案:检查代码中的 USERPASS 变量是否与数据库中的用户名和密码完全一致(注意大小写)。

连接 Java 和 Oracle 11g 的流程可以总结为: 下载驱动 -> 配置项目 -> 编写代码 -> 调试连接

遵循以上步骤,特别是处理好 URL 格式和项目依赖,并使用 try-with-resources 管理资源,你就可以顺利地完成 Java 与 Oracle 11g 的连接了,祝你编码顺利!

分享:
扫描分享到社交APP
上一篇
下一篇