核心连接参数(必须提供)
这些是建立任何连接所必需的基本信息。

(图片来源网络,侵删)
| 参数名 | 说明 | 示例值 | 备注 |
|---|---|---|---|
user |
数据库用户名 | scott |
用于身份验证。 |
password |
数据库密码 | tiger |
与用户名对应的密码。 |
url |
数据库连接地址 | jdbc:oracle:thin:@localhost:1521:ORCL |
这是最重要的参数,包含了服务器地址、端口和服务名/SID。 |
URL 格式详解
jdbc:oracle:thin: 是 Oracle JDBC 驱动的固定标识,后面的地址部分有几种常见的格式:
Thin 模式(最常用)
Thin 模式是纯 Java 实现,无需客户端库,是现代应用的首选。
格式:jdbc:oracle:thin:@<host>:<port>:<service_name_or_sid>
<host>: 数据库服务器的 IP 地址或主机名。- 示例:
localhost,168.1.100,mydb.example.com
- 示例:
<port>: 数据库监听器的端口号,默认为1521。- 示例:
1521
- 示例:
<service_name_or_sid>: 服务名 或 SID。- SID: Oracle 数据库的旧标识符,一个数据库实例只有一个 SID。
- 示例:
ORCL,ORCLCDB
- 示例:
- Service Name (服务名): Oracle 9i 之后引入的概念,更灵活,一个数据库可以有多个服务名,并且可以跨实例。
- 示例:
ORCLPDB1,sales_db
- 示例:
- SID: Oracle 数据库的旧标识符,一个数据库实例只有一个 SID。
示例:

(图片来源网络,侵删)
// 使用 SID String url1 = "jdbc:oracle:thin:@localhost:1521:ORCL"; // 使用 Service Name (推荐) String url2 = "jdbc:oracle:thin:@localhost:1521/ORCLPDB1";
EZConnect 格式(简化版)
这是 Thin 模式的一种简化写法,在 Oracle 10g 及更高版本中推荐使用,语法更清晰。
格式:jdbc:oracle:thin:@//<host>:<port>/<service_name_or_sid>
示例:
// 使用 EZConnect 格式 (推荐) String url = "jdbc:oracle:thin:@//localhost:1521/ORCLPDB1";
TNSNames 格式
这种方式需要客户端配置 tnsnames.ora 文件,驱动会从该文件中查找连接信息,在配置复杂的网络环境时很有用。

(图片来源网络,侵删)
tnsnames.ora 文件示例:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCLPDB1)
)
)
Java 代码中的 URL:
String url = "jdbc:oracle:thin:@ORCL";
JDBC 驱动会在客户端的 tnsnames.ora 文件中查找 ORCL 这个条目。
高级连接参数(通过 Properties 对象设置)
这些参数不是必须的,但对于优化连接池性能、处理特定场景非常重要,它们通常作为 java.util.Properties 对象传递给 DriverManager.getConnection() 方法。
| 参数名 | 说明 | 建议值 | 备注 |
|---|---|---|---|
v$session.program |
在 v$session 视图中显示的客户端程序名。 |
MyJavaApp |
非常重要!用于在数据库端识别是哪个应用建立的连接,便于监控和排查问题。 |
v$session.client_identifier |
在 v$session 视图中显示的客户端标识符。 |
user_123 |
用于将数据库会话与最终用户或业务逻辑关联起来,便于审计和跟踪。 |
defaultRowPrefetch |
预取的行数。 | 100 |
性能关键参数,减少网络往返次数,显著提升查询性能。 |
includeSynonyms |
是否查询包含同义词的表。 | false |
默认为 false,如果应用需要访问同义词,可以设为 true,但可能会有轻微性能开销。 |
restrictGetTables |
限制 DatabaseMetaData.getTables() 的返回结果。 |
false |
默认为 false,设为 true 可以只返回用户有权限访问的表,减少元数据查询开销。 |
remarks |
是否获取表的备注信息。 | true |
默认为 false,设为 true 可以获取 COMMENT ON table 的信息。 |
defaultBatchValue |
执行 addBatch() 后的批量提交大小。 |
20 |
用于批量插入/更新操作,提升性能。 |
javax.net.ssl.keyStore |
客户端密钥库路径。 | /path/to/client.jks |
用于 SSL/TLS 加密连接。 |
javax.net.ssl.keyStorePassword |
客户端密钥库密码。 | password |
配合上述参数使用。 |
Java 代码示例
下面是一个完整的示例,展示了如何使用上述参数建立连接。
添加 Maven 依赖
确保你的项目中包含了 Oracle JDBC 驱动,推荐使用 Oracle 官方发布的 Maven 仓库。
<!-- pom.xml -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version> <!-- 根据你的 Oracle 数据库版本选择合适的驱动版本 -->
</dependency>
连接代码示例
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
public class OracleJdbcExample {
// 数据库连接信息
private static final String DB_URL = "jdbc:oracle:thin:@//localhost:1521/ORCLPDB1";
private static final String DB_USER = "scott";
private static final String DB_PASSWORD = "tiger";
public static void main(String[] args) {
// 使用 try-with-resources 确保连接和资源被正确关闭
try (Connection connection = getOracleConnection()) {
System.out.println("成功连接到 Oracle 数据库!");
// 示例:执行一个查询
String sql = "SELECT * FROM emp WHERE empno = ?";
try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
pstmt.setInt(1, 7788); // 查询员工编号为 7788 的员工
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
System.out.println("员工姓名: " + rs.getString("ENAME"));
System.out.println("员工职位: " + rs.getString("JOB"));
} else {
System.out.println("未找到该员工。");
}
}
} catch (SQLException e) {
System.err.println("连接数据库失败!");
e.printStackTrace();
}
}
/**
* 获取一个带有高级参数的 Oracle 数据库连接
*/
public static Connection getOracleConnection() throws SQLException {
// 1. 创建 Properties 对象来存储高级参数
Properties props = new Properties();
props.setProperty("user", DB_USER);
props.setProperty("password", DB_PASSWORD);
// 2. 设置高级连接参数
props.setProperty("v$session.program", "MyJavaApp"); // 设置应用名
props.setProperty("v$session.client_identifier", "user_123"); // 设置客户端标识
props.setProperty("defaultRowPrefetch", "100"); // 设置预取行数,提升查询性能
// 3. 使用 DriverManager 获取连接
// 注意:URL 和 Properties 都需要传递
return DriverManager.getConnection(DB_URL, props);
}
}
重要注意事项
- 驱动版本:务必使用与你的 Oracle 数据库版本兼容或更高的 JDBC 驱动版本,Oracle 19c 数据库最好使用
ojdbc8或ojdbc10,使用不兼容的驱动可能会导致功能异常或性能问题。 - 连接池:在生产环境中,绝对不要在每次请求时都创建和销毁连接,必须使用连接池(如 HikariCP, DBCP, C3P0)来管理数据库连接,这是提升应用性能和稳定性的关键。
- 密码安全:不要将硬编码的密码写在代码中,应使用配置文件、环境变量或密钥管理服务来管理敏感信息。
- 字符集:如果应用使用非英文字符(如中文),确保数据库服务器的字符集、客户端环境的字符集(
NLS_LANG)和 JDBC 驱动的字符集设置保持一致,以避免乱码问题,在 URL 中可以添加?charset=UTF-8来指定字符集(jdbc:oracle:thin:@//localhost:1521/ORCLPDB1?charset=UTF-8)。
