杰瑞科技汇

Java Oracle驱动包如何正确配置与使用?

这是一个在 Java 开发中非常常见但又容易让人困惑的话题,主要是因为 Oracle 的驱动包经历了多次演变和授权变更。

Java Oracle驱动包如何正确配置与使用?-图1
(图片来源网络,侵删)

推荐使用的 Oracle JDBC 驱动是 UCP (Universal Connection Pool),它包含在 ojdbc8.jar 或更高版本的 ojdbc11.jar 中。从 Oracle 19c (驱动版本 19.3.0.0) 开始,Oracle 官方不再提供免费的 ojdbc.jar 下载。


驱动包的演变历史

理解历史能帮助你更好地选择和使用当前的驱动。

驱动版本 主要 JAR 文件 Java 版本支持 特点与说明
Thin 驱动 (早期) classes12.zip (JDBC 2.0) Java 1.2 - 1.4 最古老的驱动,功能有限,已被淘汰。
Thin 驱动 (主流) ojdbc6.jar (JDBC 4.0) Java 1.6 - 1.8 经典驱动,适用于 Java 6, 7, 8,这是过去十年最广泛使用的版本,很多遗留项目仍在使用。
Thin 驱动 (现代) ojdbc8.jar (JDBC 4.2) Java 8 及以上 支持 Java 8, 9, 10, 11,支持新特性,如 java.time 包中的日期时间类型。
Thin 驱动 (最新) ojdbc11.jar (JDBC 4.3) Java 11 及以上 支持 Java 11+,是 ojdbc8.jar 的超集,推荐在新项目中使用。
UCP (连接池) ucp.jar (通常与 ojdbcX.jar 打包在一起) Java 8 及以上 Oracle 推荐的连接池实现,它提供了高性能、高可用性的连接池功能,通常与 ojdbc8.jarojdbc11.jar 一起使用。

如何获取驱动包?

这是最容易踩坑的地方,获取方式取决于你的需求。

使用 Maven 或 Gradle (推荐)

这是最现代、最简单的方式,可以自动管理依赖和版本。

Java Oracle驱动包如何正确配置与使用?-图2
(图片来源网络,侵删)

Maven 配置 (pom.xml)

你需要从 Oracle 的 Maven 仓库下载,由于 Oracle 的仓库需要认证,直接在 pom.xml 中写死版本号可能会失败。

方法 A: 使用 Oracle 官方 Maven 仓库 (需要网络访问权限)

pom.xml<repositories> 部分添加 Oracle 仓库:

Java Oracle驱动包如何正确配置与使用?-图3
(图片来源网络,侵删)
<repositories>
    <repository>
        <id>oracle</id>
        <name>Oracle Maven Repository</name>
        <url>https://maven.oracle.com</url>
        <layout>default</layout>
        <releases>
            <enabled>true</enabled>
        </releases>
    </repository>
</repositories>

然后在 <dependencies> 中添加驱动依赖:

<dependencies>
    <!-- 使用 ojdbc11.jar,适用于 Java 11+ -->
    <dependency>
        <groupId>com.oracle.database.jdbc</groupId>
        <artifactId>ojdbc11</artifactId>
        <version>21.9.0.0</version> <!-- 请使用最新的稳定版本 -->
    </dependency>
    <!-- 或者使用 ojdbc8.jar,适用于 Java 8+ -->
    <!-- <dependency>
        <groupId>com.oracle.database.jdbc</groupId>
        <artifactId>ojdbc8</artifactId>
        <version>19.3.0.0</version>
    </dependency> -->
</dependencies>

注意:首次使用时,Maven 会提示你输入 Oracle Maven 仓库的用户名和密码,你需要拥有一个免费的 Oracle OTN (Oracle Technology Network) 账号。

方法 B: 使用代理仓库 (国内常用)

如果无法直接访问 Oracle 官方仓库,可以使用国内的代理仓库,如阿里云 Maven 仓库。

pom.xml<repositories> 部分添加:

<repositories>
    <repository>
        <id>aliyun</id>
        <name>aliyun maven</name>
        <url>https://maven.aliyun.com/repository/public</url>
        <layout>default</layout>
    </repository>
</repositories>

然后添加依赖,依赖的 groupIdartifactId 不变:

<dependencies>
    <dependency>
        <groupId>com.oracle.database.jdbc</groupId>
        <artifactId>ojdbc11</artifactId>
        <version>21.9.0.0</version>
    </dependency>
</dependencies>

手动下载 JAR 文件

如果你不想使用 Maven,或者项目环境不允许,可以手动下载。

  1. 访问 Oracle 官方下载页面:

  2. 选择正确的驱动:

    • 在页面中找到 "JDBC Drivers" 部分。
    • 选择你需要的驱动版本,"Oracle Database JDBC/UCP Drivers"。
    • 你会看到针对不同 Java 版本的驱动,如 "Java 8", "Java 11" 等。
    • 注意: 从 Oracle Database 19c (对应驱动版本 19.3.0.0) 开始,你需要登录 OTN 账号才能下载,更早的版本(如 18c, 12c)可能仍然可以免费下载。
  3. 下载并添加到项目:

    • 下载 ZIP 压缩包,解压后你会找到 ojdbcX.jar 文件。
    • 将此 JAR 文件复制到你的项目的 lib 目录下。
    • 在你的 IDE (如 IntelliJ IDEA, Eclipse) 中,右键点击 JAR 文件,选择 "Add as Library" 或 "Add to Build Path",将其添加到项目的类路径中。

如何在代码中使用驱动?

获取到驱动包后,在 Java 代码中连接数据库非常简单。

连接字符串格式

Oracle 的 JDBC URL 格式如下:

jdbc:oracle:thin:@<HOST>:<PORT>:<SERVICE_NAME_OR_SID>
  • jdbc:oracle:thin:: 指定使用 Thin 驱动。
  • <HOST>: 数据库服务器的 IP 地址或主机名。
  • <PORT>: 数据库监听的端口号,默认是 1521
  • <SERVICE_NAME_OR_SID>:
    • 推荐使用 SERVICE_NAME,这是现代 Oracle 数据库的标识方式。
    • SID 是旧式的标识方式,一些老系统仍在使用。

代码示例

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class OracleJdbcExample {
    // 数据库连接信息 - 请根据你的实际情况修改
    static final String DB_URL = "jdbc:oracle:thin:@//localhost:1521/ORCLCDB"; // 使用 SERVICE_NAME
    // static final String DB_URL = "jdbc:oracle:thin:@localhost:1521:orcl"; // 使用 SID
    static final String USER = "your_username";
    static final String PASS = "your_password";
    public static void main(String[] args) {
        // 使用 try-with-resources 语句,确保连接、语句和结果集都能被自动关闭
        try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT 'Hello from Oracle!' AS message FROM DUAL")) {
            // 检查连接是否成功
            if (conn != null) {
                System.out.println("Connected to the Oracle database successfully!");
            }
            // 处理查询结果
            while (rs.next()) {
                // 通过列名获取数据,更安全
                String message = rs.getString("message");
                System.out.println("Message: " + message);
            }
        } catch (SQLException e) {
            System.err.println("Connection to Oracle failed!");
            e.printStackTrace();
        }
    }
}

重要注意事项

  1. 版本匹配: 确保 JDBC 驱动的版本与你的 Oracle 数据库版本和 Java 运行环境版本兼容。ojdbc8.jar 最好在 Java 8 环境中使用,ojdbc11.jar 在 Java 11+ 环境中使用。
  2. 字符集问题: 如果应用和数据库的字符集不一致(应用是 UTF-8,数据库是 GBK),可能会出现乱码,在 URL 中可以指定字符集:
    jdbc:oracle:thin:@//localhost:1521/ORCLCDB?useUnicode=true&characterEncoding=UTF-8
  3. 连接池: 在生产环境中,绝对不要每次都创建新的数据库连接,必须使用连接池(如 HikariCP, DBCP, 或 Oracle 自家的 UCP)来管理连接,以提高性能和稳定性,HikariCP 是目前非常流行且高性能的选择。
  4. 权限: 确保你的数据库用户有足够的权限执行你想操作的 SQL 语句。
需求 推荐方案 说明
新项目 Maven + ojdbc11.jar 最现代、最方便的选择,支持 Java 11+。
Java 8 项目 Maven + ojdbc8.jar 最稳妥的选择,兼容性好,社区支持广。
无法使用 Maven 手动下载 ojdbc8.jarojdbc11.jar 从 Oracle 官网下载,并添加到项目类路径。
生产环境 HikariCP + ojdbcX.jar 使用 HikariCP 作为连接池,性能优异。
遗留项目 继续使用 ojdbc6.jar 如果项目稳定运行,无需强行升级。

希望这份详细的指南能帮助你顺利地在 Java 项目中使用 Oracle 驱动!

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