需要哪个JAR包?
要连接Oracle数据库,您需要官方提供的 JDBC驱动程序,这个驱动程序的核心JAR包是:

-
ojdbc8.jar或ojdbc11.jar -
ojdbc8.jar:- 用于连接 Oracle 11g, 12c, 18c, 19c 等较新版本的数据库。
- 它需要 Java 8 (JDK 8) 或更高版本的JVM来运行。
- 这是目前最广泛使用的版本。
-
ojdbc11.jar:- 用于连接 Oracle 19c 及更高版本的数据库。
- 它要求 Java 11 (JDK 11) 或更高版本的JVM。
- 这是未来的趋势,专为模块化Java(JPMS)设计。
对于大多数项目,ojdbc8.jar 是一个安全且兼容性好的选择。

如何获取JAR包?
您可以通过以下几种主要方式获取 ojdbc.jar 文件。
从Oracle官网下载 (最传统的方式)
这是最官方、最可靠的方式,但需要注册Oracle账户。
-
访问Oracle官网下载页面:
-
选择版本:
(图片来源网络,侵删)- 找到您需要的版本,"Oracle JDBC driver for JDK 8"。
- 点击 "Download" 按钮。
-
接受协议:
您必须接受许可协议才能下载。
-
下载文件:
- 下载下来的通常是一个
.zip压缩包,解压后,您可以在ojdbc8.jar或ojdbc11.jar文件夹中找到所需的JAR包。
- 下载下来的通常是一个
注意: Oracle官网的下载流程有时会变化,但基本逻辑是选择对应Java版本的驱动。
使用Maven或Gradle依赖管理 (强烈推荐)
这是现代Java项目中最推荐的方式,可以自动管理依赖和版本,无需手动下载和放置JAR包。
使用Maven
您需要在您的 pom.xml 文件中添加以下依赖。
对于 ojdbc8 (适用于JDK 8):
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version> <!-- 请使用您需要的最新版本 -->
</dependency>
对于 ojdbc11 (适用于JDK 11+):
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc11</artifactId>
<version>21.5.0.0</version> <!-- 请使用您需要的最新版本 -->
</dependency>
Maven会自动从中央仓库下载并管理这个依赖。
使用Gradle
您需要在您的 build.gradle 或 build.gradle.kts 文件中添加以下依赖。
对于 ojdbc8 (适用于JDK 8):
implementation 'com.oracle.database.jdbc:ojdbc8:19.3.0.0' // 请使用您需要的最新版本
对于 ojdbc11 (适用于JDK 11+):
implementation 'com.oracle.database.jdbc:ojdbc11:21.5.0.0' // 请使用您需要的最新版本
使用构建工具的插件 (例如Maven Wrapper)
一些项目使用如 ojdbc 这样的第三方Maven仓库,但这通常不是最佳实践,因为它们可能不是官方来源,且稳定性无法保证。强烈建议优先使用Oracle官方的Maven仓库(如上所述)。
如何在代码中使用?
获取到JAR包后,您就可以在Java代码中建立数据库连接了。
步骤1: 添加JAR包到项目路径
- 非Maven/Gradle项目: 将下载的
ojdbc8.jar文件复制到您的项目目录下(lib文件夹),然后在您的IDE(如Eclipse, IntelliJ IDEA)中将其添加到项目的库(Libraries)或构建路径(Build Path)中。 - Maven/Gradle项目: 无需任何手动操作,构建工具会自动处理。
步骤2: 编写Java连接代码
以下是一个完整的、使用经典的 OracleDataSource 的连接示例。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class OracleConnectionExample {
// 数据库连接信息 (请根据您的实际情况修改)
// String dbURL = "jdbc:oracle:thin:@//<hostname>:<port>/<service_name>";
// String dbURL = "jdbc:oracle:thin:@<hostname>:<port>:<sid>";
private static final String DB_URL = "jdbc:oracle:thin:@localhost:1521:ORCL"; // 示例URL
private static final String USER = "your_username";
private 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("连接成功!");
}
// 处理查询结果
while (rs.next()) {
// 通过列名获取数据,更安全
String message = rs.getString("message");
System.out.println("查询结果: " + message);
}
} catch (SQLException e) {
System.err.println("连接数据库失败!");
e.printStackTrace();
}
}
}
代码解释:
- 加载驱动: 在较新的JDBC驱动(4.0以上)中,通常不需要显式地调用
Class.forName("oracle.jdbc.OracleDriver"),驱动程序会自动注册。 - 获取连接: 使用
DriverManager.getConnection()方法,传入数据库URL、用户名和密码。jdbc:oracle:thin:: 表示使用瘦(Thin)驱动,这是一个纯Java驱动,无需客户端库。@//<host>:<port>/<service_name>: 这是Oracle推荐的标准连接URL格式(Easy Connect Plus)。@<host>:<port>:<sid>: 是较老的服务ID(SID)格式,在某些旧环境或特定配置下可能仍然使用。
- 创建语句和执行查询: 创建
Statement对象,并执行SQL查询。 - 处理结果集: 遍历
ResultSet来获取查询结果。 - 关闭资源: 使用
try-with-resources语法可以确保Connection,Statement, 和ResultSet在代码块执行完毕后自动关闭,防止资源泄漏。
常见问题与解决方案
java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver
原因: JVM在运行时找不到Oracle JDBC驱动的类文件,这意味着 ojdbc8.jar 没有被正确地添加到项目的类路径中。
解决方案:
- 检查JAR包是否已下载并放置在正确的位置。
- 在IDE中,右键项目 -> Build Path / Project Structure -> Libraries,确认已添加该JAR包。
- 如果使用Maven/Gradle,确保
pom.xml或build.gradle中的依赖配置正确,并执行了mvn clean install或gradle build。
java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:...
原因: 这通常不是因为找不到驱动类(ClassNotFoundException),而是因为JDBC URL的格式不正确,导致 DriverManager 无法识别应该使用哪个驱动。
解决方案:
- 仔细检查您的数据库URL是否与您的Oracle数据库实例配置匹配(端口、服务名/SID)。
- 确保URL以
jdbc:oracle:thin:开头。
连接被拒绝 (Connection refused)
原因: 无法连接到指定的主机和端口。
- Oracle数据库服务未启动。
- 防火墙阻止了1521端口。
- 数据库监听器配置错误,没有在指定的端口上监听。
解决方案:
- 确认Oracle数据库服务正在运行。
- 检查服务器的防火墙设置。
- 在数据库服务器上使用
lsnrctl status命令检查监听器状态。
| 任务 | 推荐方法 | 说明 |
|---|---|---|
| 获取JAR包 | Maven/Gradle 依赖 | 最简单、最可靠,自动管理版本和依赖。 |
| Oracle官网下载 | 适用于无法使用Maven/Gradle的旧项目。 | |
| 核心JAR包 | ojdbc8.jar |
兼容性好,适用于JDK 8+和大多数Oracle版本。 |
ojdbc11.jar |
适用于JDK 11+和最新的Oracle数据库。 | |
| 代码实现 | DriverManager |
经典、简单的方式,适合大多数场景。 |
OracleDataSource |
功能更强大,支持连接池等高级特性。 |
希望这份详细的指南能帮助您顺利解决Java连接Oracle数据库的问题!
