1. 概述
Oracle数据库是业界最流行的关系型数据库之一。本文将介绍如何通过JDBC驱动连接Oracle数据库,涵盖环境准备、依赖配置和连接实现等关键步骤。
2. 数据库准备
首先需要准备Oracle数据库环境。如果没有现成环境,可通过以下两种方式获取:
✅ 官方下载
从Oracle Database Software Downloads获取免费版本
✅ Docker方案
使用Oracle Database Container Images中的镜像
本文以*Oracle Database 23ai (23.5.0)*的Docker镜像为例进行演示。
3. Maven依赖配置
在项目中添加Oracle JDBC驱动依赖。针对Oracle 23ai数据库,推荐使用ojdbc11驱动:
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc11</artifactId>
<version>23.5.0.24.07</version>
</dependency>
⚠️ 版本说明:
4. 数据库连接实现
推荐使用OracleDataSource
(Oracle对DataSource
接口的实现)而非DriverManager
,原因如下:
- 更好的可扩展性
- 更便捷的配置方式
4.1 连接方法实现
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();
}
💡 替代方案:
也可使用setUser()
和setPassword()
方法替代setConnectionProperties()
,但后者能更方便地配置其他属性(如自动提交、缓存、抓取大小等)。
4.2 连接测试
@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语句自动管理连接关闭,避免资源泄漏。
❌ 常见错误:
- ORA-17868:主机名错误
- ORA-01017:用户名/密码错误
5. 性能优化:连接池
在生产环境中,特别是Web应用,强烈建议使用连接池优化性能:
🔧 连接池优势:
- 复用数据库连接
- 减少连接创建开销
- 提升系统吞吐量
📦 Oracle官方方案:
Universal Connection Pool (ucp11)支持Java 8/11+
🔌 第三方选择:
- HikariCP(高性能首选)
- Tomcat JDBC Pool
- Apache Commons DBCP2
6. 总结
通过本文我们了解到:
- Oracle JDBC连接配置简单直接
OracleDataSource
是推荐的连接方式- 生产环境必须使用连接池
- 错误处理需关注ORA系列错误码
掌握这些要点后,即可在Java应用中高效集成Oracle数据库。