51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

通过 JDBC 驱动连接 Oracle 数据库

1、概览 {#1概览}

Oracle 数据库是最流行的关系数据库之一。本文将带你了解如何使用 JDBC 驱动连接到 Oracle 数据库。

2、数据库 {#2数据库}

首先,我们需要一个数据库。如果没有,则可以从 Oracle Database Software Downloads 下载并安装免费版本,或者使用 Oracle Database Container Images 上的 Docker 镜像。

本文中使用的是 Oracle Database 23ai (23.5.0)Docker 镜像。

3、Maven 依赖 {#3maven-依赖}

数据库就绪后,在项目中添加 Oracle 的 JDBC 驱动依赖,本文使用 ojdbc11 连接 Oracle 23ai

<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc11</artifactId>
    <version>23.5.0.24.07</version>
</dependency>

ojdbc11 的最新版本可在 Central Maven Repository 中找到。该依赖项要求 Java 11 或更高版本,是较新版本 Java 的推荐驱动。

为了向后兼容,ojdbc8 可用于 Java 8。也推荐使用 ojdbc10 作为 Oracle 19c 的驱动程序。

4、连接到数据库 {#4连接到数据库}

首先,创建一个 OracleDataSource(Oracle 数据源接口的实现)。这比使用 DriverManager 更好,因为 DataSource 更具可扩展性,也更易于设置。

初始化连接属性,并在 OracleDataSource 中设置属性和 URL。然后,调用 getConnection() 来获取新连接:

public static Connection getConnection(String databaseUrl, String userName, String password) throws SQLException {
    var connectionProperties = new Properties();
    connectionProperties.setProperty(OracleConnection.CONNECTION_PROPERTY_USER_NAME, userName);
    connectionProperties.setProperty(OracleConnection.CONNECTION_PROPERTY_PASSWORD, password);

    var oracleDataSource = new OracleDataSource();
    oracleDataSource.setConnectionProperties(connectionProperties);
    oracleDataSource.setURL(databaseUrl);

    return oracleDataSource.getConnection();
}

另外,OracleDataSourcesetUser()setPassword() 方法,可以用来代替 setConnectionProperties()。不过,值得注意的是,OracleConnection 静态地提供了许多属性名称,我们可以通过这种方法设置自动提交、缓存或获取大小等其他属性。

测试 getConnection() 方法,获取用户名:

@Test
void whenConnectionRetrieved_thenUserNameIsReturned() throws SQLException {
    var url = "jdbc:oracle:thin:@//localhost:1521/FREEPDB1";
    var userName = "BAELDUNG";
    var password = "baeldung_pw";

    String retrievedUser = null;
    try (var connection = ConnectToOracleDb.getConnection(url, userName, password)) {
        retrievedUser = connection.getMetaData().getUserName();
    }

    assertEquals(userName, retrievedUser);
}

此示例在一个 try-with-resources 块中创建连接,完成后自动关闭连接。

如果 URL、用户名或密码出错,就会看到 ORA error 。例如,ORA-17868 表示主机未知,ORA-01017 表示凭证错误。

5、利用连接池优化性能 {#5利用连接池优化性能}

在优化性能时,有很多事情需要考虑。特别是,如果你正在开发 Web 应用,请考虑使用连接池。

连接池是一个可重复使用的数据库连接缓存。

Oracle 为 Java 11+ 及以上版本和 Java 8 提供了通用连接池(ucp11 )。这是在 JDBC 依赖之上的额外依赖,但许多其他库(如 HikariTomcatApache Commons DBCP2)也可用于连接池。

6、总结 {#6总结}

本文详细介绍了如何使用 ojdbc11 驱动连接 Oracle 23ai 数据库,以及如何利用连接池优化性能。


Ref:https://www.baeldung.com/java-jdbc-oracle-connection

赞(0)
未经允许不得转载:工具盒子 » 通过 JDBC 驱动连接 Oracle 数据库