基本格式
Oracle JDBC 连接字符串的基本格式如下:

jdbc:oracle:driver_type:[username/password]@host:port:SID
或者使用服务名称(Service Name,更推荐的方式):
jdbc:oracle:driver_type:[username/password]@//host:port/service_name
格式详解
| 部分 | 描述 | 示例 |
|---|---|---|
jdbc:oracle |
协议头,固定不变,表示这是一个 Oracle JDBC 连接。 | jdbc:oracle |
driver_type |
驱动类型,指定要使用的 Oracle JDBC 驱动版本。 | thin 或 oci |
[username/password] |
数据库的用户名和密码,可选,也可以在 getConnection 方法中单独提供。 |
scott/tiger |
| 分隔符,用于分隔驱动信息与数据库地址信息。 | ||
host |
数据库服务器的 IP 地址或主机名。 | localhost 或 168.1.100 |
| 分隔符。 | ||
port |
数据库监听器的端口号,默认为 1521。 |
1521 |
SID |
数据库的标识符,这是旧版的标识方式。 | orcl 或 xe |
| 当使用服务名称时,需要双斜杠。 | ||
service_name |
数据库的全局数据库名,这是 Oracle 推荐的现代标识方式。 | ORCLPDB1 或 XEPDB1 |
驱动类型详解
主要有两种驱动类型:thin 和 oci。
a. thin 驱动
- 描述: 纯 Java 驱动,它通过 Java 的 Socket 直接与数据库的监听器通信,无需在客户端安装任何 Oracle 软件。
- 优点: 轻量级、易于部署、跨平台(只要有 JVM 即可)。
- 缺点: 性能可能略低于
oci驱动。 - 使用场景: 绝大多数 Java 应用程序,尤其是 Web 应用、微服务等。
示例 (使用 SID):
jdbc:oracle:thin:scott/tiger@localhost:1521:orcl
示例 (使用 Service Name - 推荐):

jdbc:oracle:thin:scott/tiger@//localhost:1521/ORCLPDB1
b. oci 驱动 (Oracle Call Interface)
- 描述: 本地 API 驱动,它通过调用客户端机器上安装的 Oracle 客户端库(如 Oracle Instant Client 或 Oracle Client)来与数据库通信。
- 优点: 性能通常更高,因为它利用了本地代码和 Oracle Net 的优化。
- 缺点:
- 需要在客户端机器上安装和配置 Oracle 客户端软件,增加了部署复杂性。
- 平台相关,需要为不同的操作系统提供对应的客户端库。
- 使用场景: 需要高性能的客户端-服务器应用程序,且可以控制客户端环境。
示例 (使用 SID):
jdbc:oracle:oci8:scott/tiger@localhost:1521:orcl
示例 (使用 Service Name):
jdbc:oracle:oci:scott/tiger@//localhost:1521/ORCLPDB1
连接字符串参数 (Properties)
你可以在连接字符串的末尾添加 后面跟上 key=value 对,用 & 分隔,来设置额外的连接属性。
常用参数:

| 参数 | 描述 | 示例 |
|---|---|---|
user |
数据库用户名,如果未在 URL 中提供,可以使用此参数。 | user=scott |
password |
数据库密码。 | password=tiger |
sslConfig |
启用 SSL/TLS 加密连接。 | sslConfig=DefaultDir |
javax.net.ssl.trustStore |
指定信任库文件的路径。 | javax.net.ssl.trustStore=/path/to/truststore.jks |
javax.net.ssl.trustStorePassword |
指定信任库的密码。 | javax.net.ssl.trustStorePassword=changeit |
includeSynonyms |
是否包含同义词。 | includeSynonyms=true |
includeAllTables |
是否包含所有表。 | includeAllTables=true |
restrictGetTables |
限制 DatabaseMetaData.getTables() 的返回结果。 |
restrictGetTables=true |
示例 (带参数):
jdbc:oracle:thin:@//localhost:1521/ORCLPDB1?user=scott&password=tiger&sslConfig=DefaultDir&javax.net.ssl.trustStore=/path/to/truststore.jks
完整的 Java 连接代码示例
以下是一个使用 thin 驱动和 Service Name 的完整示例。
步骤 1: 添加 JDBC 驱动依赖
如果你使用 Maven,在 pom.xml 中添加 Oracle JDBC 驱动依赖:
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version> <!-- 请根据你的 Oracle 数据库版本选择合适的版本 -->
</dependency>
注意: Oracle 驱动需要从 Oracle 官网下载并手动安装到你的 Maven 仓库,或者使用支持 Oracle 驱动的 Maven 私服。
步骤 2: 编写 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/ORCLPDB1";
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 '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("连接 Oracle 数据库失败!");
e.printStackTrace();
}
}
}
连接字符串快速参考表
| 场景 | 连接字符串 (使用 SID) | 连接字符串 (使用 Service Name) |
|---|---|---|
本地 thin 驱动 |
jdbc:oracle:thin:scott/tiger@localhost:1521:orcl |
jdbc:oracle:thin:scott/tiger@//localhost:1521/ORCLPDB1 |
远程 thin 驱动 |
jdbc:oracle:thin:scott/tiger@192.168.1.100:1521:orcl |
jdbc:oracle:thin:scott/tiger@//192.168.1.100:1521/ORCLPDB1 |
本地 oci 驱动 |
jdbc:oracle:oci8:scott/tiger@localhost:1521:orcl |
jdbc:oracle:oci:scott/tiger@//localhost:1521/ORCLPDB1 |
| 带参数 | jdbc:oracle:thin:@//localhost:1521:orcl?user=scott&password=tiger |
jdbc:oracle:thin:@//localhost:1521/ORCLPDB1?user=scott&password=tiger |
- 首选
thin驱动:对于现代 Java 应用,thin驱动是首选,因为它简单、轻便。 - 首选 Service Name:尽量使用 Service Name (
service_name) 而不是 SID,这是 Oracle 官方推荐的数据库标识方式,尤其是在 RAC 和 PDB (Pluggable Database) 环境中。 - URL 和 Properties 分离:为了代码清晰和灵活性,建议在
DriverManager.getConnection()方法中分别传递 URL 和Properties对象(包含用户名和密码),而不是将它们都硬编码在 URL 字符串里。
