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();
}
另外,OracleDataSource
有 setUser()
和 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 依赖之上的额外依赖,但许多其他库(如 Hikari 、Tomcat 和 Apache Commons DBCP2)也可用于连接池。
6、总结 {#6总结}
本文详细介绍了如何使用 ojdbc11 驱动连接 Oracle 23ai 数据库,以及如何利用连接池优化性能。
Ref:https://www.baeldung.com/java-jdbc-oracle-connection