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

推荐使用的 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.jar 或 ojdbc11.jar 一起使用。 |
如何获取驱动包?
这是最容易踩坑的地方,获取方式取决于你的需求。
使用 Maven 或 Gradle (推荐)
这是最现代、最简单的方式,可以自动管理依赖和版本。

Maven 配置 (pom.xml)
你需要从 Oracle 的 Maven 仓库下载,由于 Oracle 的仓库需要认证,直接在 pom.xml 中写死版本号可能会失败。
方法 A: 使用 Oracle 官方 Maven 仓库 (需要网络访问权限)
在 pom.xml 的 <repositories> 部分添加 Oracle 仓库:

<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>
然后添加依赖,依赖的 groupId 和 artifactId 不变:
<dependencies>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc11</artifactId>
<version>21.9.0.0</version>
</dependency>
</dependencies>
手动下载 JAR 文件
如果你不想使用 Maven,或者项目环境不允许,可以手动下载。
-
访问 Oracle 官方下载页面:
-
选择正确的驱动:
- 在页面中找到 "JDBC Drivers" 部分。
- 选择你需要的驱动版本,"Oracle Database JDBC/UCP Drivers"。
- 你会看到针对不同 Java 版本的驱动,如 "Java 8", "Java 11" 等。
- 注意: 从 Oracle Database 19c (对应驱动版本 19.3.0.0) 开始,你需要登录 OTN 账号才能下载,更早的版本(如 18c, 12c)可能仍然可以免费下载。
-
下载并添加到项目:
- 下载 ZIP 压缩包,解压后你会找到
ojdbcX.jar文件。 - 将此 JAR 文件复制到你的项目的
lib目录下。 - 在你的 IDE (如 IntelliJ IDEA, Eclipse) 中,右键点击 JAR 文件,选择 "Add as Library" 或 "Add to Build Path",将其添加到项目的类路径中。
- 下载 ZIP 压缩包,解压后你会找到
如何在代码中使用驱动?
获取到驱动包后,在 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();
}
}
}
重要注意事项
- 版本匹配: 确保 JDBC 驱动的版本与你的 Oracle 数据库版本和 Java 运行环境版本兼容。
ojdbc8.jar最好在 Java 8 环境中使用,ojdbc11.jar在 Java 11+ 环境中使用。 - 字符集问题: 如果应用和数据库的字符集不一致(应用是
UTF-8,数据库是GBK),可能会出现乱码,在 URL 中可以指定字符集:jdbc:oracle:thin:@//localhost:1521/ORCLCDB?useUnicode=true&characterEncoding=UTF-8 - 连接池: 在生产环境中,绝对不要每次都创建新的数据库连接,必须使用连接池(如 HikariCP, DBCP, 或 Oracle 自家的 UCP)来管理连接,以提高性能和稳定性,HikariCP 是目前非常流行且高性能的选择。
- 权限: 确保你的数据库用户有足够的权限执行你想操作的 SQL 语句。
| 需求 | 推荐方案 | 说明 |
|---|---|---|
| 新项目 | Maven + ojdbc11.jar |
最现代、最方便的选择,支持 Java 11+。 |
| Java 8 项目 | Maven + ojdbc8.jar |
最稳妥的选择,兼容性好,社区支持广。 |
| 无法使用 Maven | 手动下载 ojdbc8.jar 或 ojdbc11.jar |
从 Oracle 官网下载,并添加到项目类路径。 |
| 生产环境 | HikariCP + ojdbcX.jar |
使用 HikariCP 作为连接池,性能优异。 |
| 遗留项目 | 继续使用 ojdbc6.jar |
如果项目稳定运行,无需强行升级。 |
希望这份详细的指南能帮助你顺利地在 Java 项目中使用 Oracle 驱动!
