杰瑞科技汇

Oracle Java连接字符串如何正确配置?

基本格式

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

Oracle Java连接字符串如何正确配置?-图1
(图片来源网络,侵删)
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 驱动版本。 thinoci
[username/password] 数据库的用户名和密码,可选,也可以在 getConnection 方法中单独提供。 scott/tiger
分隔符,用于分隔驱动信息与数据库地址信息。
host 数据库服务器的 IP 地址或主机名。 localhost168.1.100
分隔符。
port 数据库监听器的端口号,默认为 1521 1521
SID 数据库的标识符,这是旧版的标识方式。 orclxe
当使用服务名称时,需要双斜杠。
service_name 数据库的全局数据库名,这是 Oracle 推荐的现代标识方式。 ORCLPDB1XEPDB1

驱动类型详解

主要有两种驱动类型:thinoci

a. thin 驱动

  • 描述: 纯 Java 驱动,它通过 Java 的 Socket 直接与数据库的监听器通信,无需在客户端安装任何 Oracle 软件。
  • 优点: 轻量级、易于部署、跨平台(只要有 JVM 即可)。
  • 缺点: 性能可能略低于 oci 驱动。
  • 使用场景: 绝大多数 Java 应用程序,尤其是 Web 应用、微服务等。

示例 (使用 SID):

jdbc:oracle:thin:scott/tiger@localhost:1521:orcl

示例 (使用 Service Name - 推荐):

Oracle Java连接字符串如何正确配置?-图2
(图片来源网络,侵删)
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 对,用 & 分隔,来设置额外的连接属性。

常用参数:

Oracle Java连接字符串如何正确配置?-图3
(图片来源网络,侵删)
参数 描述 示例
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 字符串里。
分享:
扫描分享到社交APP
上一篇
下一篇