基础 URL 格式
Java 连接 Oracle 数据库的标准 URL 格式如下:

jdbc:oracle:thin:@<host>:<port>:<service_name>
或者使用 SID (Service ID) 的格式(较旧,但某些环境仍在使用):
jdbc:oracle:thin:@<host>:<port>:<sid>
URL 格式详解
让我们分解这个 URL 的每个部分:
| 部分 | 描述 | 示例 |
|---|---|---|
jdbc:oracle:thin |
协议:这部分是固定的。 - jdbc: 表示这是一个 JDBC 连接。- oracle: 指定数据库供应商是 Oracle。- thin: 指定使用 Oracle 的纯 Java 驱动(Thin Driver),这是目前最常用、最推荐的驱动类型,因为它不需要安装 Oracle 客户端。 |
jdbc:oracle:thin |
| 分隔符:用于分隔协议和主机信息。 | ||
<host> |
主机名或 IP 地址:数据库服务器的地址,可以是本地主机 localhost 或 0.0.1,也可以是远程服务器的 IP 或域名。 |
localhost168.1.100my-oracle-server.example.com |
| 分隔符:用于分隔主机名和端口号。 | ||
<port> |
端口号:Oracle 数据库监听的网络端口,默认值是 1521,请确保您的数据库监听器正在此端口上运行。 |
1521 |
| 分隔符:用于分隔端口号和服务名/SID。 | ||
<service_name> |
服务名:这是 Oracle 推荐的标识数据库的方式(从 Oracle 9i 开始引入),它是一个全局数据库名,通常格式为 global_db_name.domain,这是现代 Oracle 数据库连接的首选方式。 |
ORCLCDB.localdomainXE |
<sid> |
系统标识符:是 Oracle 数据库的一个传统标识符,如果您的数据库使用的是较旧的配置或特定应用,可能需要使用 SID。 | ORCLXE |
完整示例
假设您的 Oracle 数据库信息如下:
- 主机:
localhost - 端口:
1521 - 服务名:
ORCLCDB - SID:
ORCL(如果你的监听器配置使用 SID)
对应的 URL

使用服务名 (Service Name) - 推荐
String url = "jdbc:oracle:thin:@localhost:1521:ORCLCDB";
使用 SID (System Identifier) - 旧式
String url = "jdbc:oracle:thin:@localhost:1521:ORCL";
连接到远程服务器
String url = "jdbc:oracle:thin:@192.168.1.100:1521:ORCLCDB";
使用 TNS 别名 (高级)
如果你的 tnsnames.ora 文件中定义了一个别名 MYDB,你也可以这样使用 URL:
String url = "jdbc:oracle:thin:@MYDB";
注意: 使用 TNS 别名要求你的 Java 运行环境能够访问到
tnsnames.ora文件,这通常意味着你需要配置oracle.net.tns_adminJVM 参数或设置环境变量,指向包含tnsnames.ora的目录,对于大多数现代应用,直接在 URL 中指定主机、端口和服务名更简单直接。
连接代码示例
下面是一个完整的 Java 代码示例,展示如何使用 JDBC 连接到 Oracle 数据库并执行一个简单的查询。
前提条件
- 安装 JDK: 确保你的系统已安装 Java Development Kit (JDK)。
- 下载 JDBC 驱动: 你需要 Oracle JDBC 驱动程序 (JDBC Driver for Oracle Database)。
- 访问 Oracle 官网下载页面: Oracle JDBC Drivers
- 下载最新版本的 "ojdbc" JAR 文件(
ojdbc8.jar或ojdbc11.jar)。
- 将 JAR 添加到项目中:
- Maven 项目: 在
pom.xml中添加依赖。 - Gradle 项目: 在
build.gradle中添加依赖。 - IDE (如 IntelliJ/Eclipse): 将下载的 JAR 文件添加到项目的库中。
- 命令行编译: 使用
javac -cp /path/to/ojdbc8.jar YourClass.java,运行时使用java -cp /path/to/ojdbc8.jar:. YourClass。
- Maven 项目: 在
Maven 依赖 (pom.xml)
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version> <!-- 请使用你下载的驱动版本号 -->
</dependency>
Java 连接代码
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:ORCLCDB";
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("连接到 Oracle 数据库成功!");
}
// 处理查询结果
while (rs.next()) {
// 获取列名为 "message" 的数据
String message = rs.getString("message");
System.out.println("查询结果: " + message);
}
} catch (SQLException e) {
System.err.println("数据库连接或查询失败!");
e.printStackTrace();
}
}
}
常见问题与最佳实践
问题 1: java.sql.SQLException: No suitable driver found
- 原因:
Class.forName在较旧的 JDBC 版本中是必需的,以显式加载驱动程序类,在新版 JDBC (4.0+) 中,这是自动完成的,但最常见的原因是 JDBC 驱动 JAR 文件没有被正确添加到项目的 Classpath 中。 - 解决方案:
- 确保你已经下载了
ojdbcX.jar。 - 确保这个 JAR 文件在你的构建路径(Build Path)或类路径(Classpath)中。
- 确保你已经下载了
问题 2: java.sql.SQLException: IO Error: The Network Adapter could not establish the connection
- 原因: 这是最常见的连接错误,表示 Java 应用无法通过网络连接到 Oracle 数据库的监听器。
- 排查步骤:
- 检查 URL: 确认主机名 (
<host>)、端口 (<port>) 是否正确。 - 检查监听器: 在 Oracle 服务器上,使用命令
lsnrctl status检查监听器是否正在运行,以及它是否在正确的端口(如1521)上监听,以及服务名/SID 是否被正确注册。 - 检查防火墙: 确保客户端和服务器之间的网络是通的,并且防火墙没有阻止
1521端口。 - TNS 排错: 如果怀疑是 TNS 配置问题,可以在服务器上使用
tnsping命令测试连接:tnsping ORCLCDB。
- 检查 URL: 确认主机名 (
问题 3: java.sql.SQLException: ORA-01017: invalid username/password; logon denied
- 原因: 用户名或密码错误。
- 解决方案: 仔细检查连接字符串中的
USER和PASS是否正确。
最佳实践
- 使用
try-with-resources: 如上面的代码示例所示,try-with-resources可以确保Connection,Statement, 和ResultSet等资源在使用完毕后能被自动关闭,避免资源泄漏。 - 使用连接池: 在生产环境中,绝对不要在每次请求时都创建和销毁连接,应该使用连接池(如 HikariCP, DBCP, C3P0)来管理和复用数据库连接,这能极大地提升应用性能和稳定性。
- 将凭据外部化: 不要将数据库用户名和密码硬编码在代码中,应该使用配置文件(如
config.properties)、环境变量或专门的密钥管理服务来存储这些敏感信息。 - 使用 Service Name 而非 SID: 除非有特殊要求,否则始终优先使用服务名(Service Name)来连接 Oracle 数据库,因为这是 Oracle 推荐的现代标准。

