JavaWeb连接Oracle数据库的完整指南
环境准备
在开始JavaWeb项目连接Oracle数据库之前,需要确保以下环境配置正确:

-
JDK安装
确保已安装JDK(建议版本1.8或更高),并配置好环境变量JAVA_HOME和Path,可通过命令java -version验证安装是否成功。 -
Oracle数据库安装
安装Oracle数据库(如Oracle 11g、12c或19c),并记录数据库的服务名(SID)、主机名(Host)、端口号(Port)以及用户名和密码,确保数据库服务已启动,并可通过SQL*Plus或PL/SQL Developer正常连接。 -
Oracle JDBC驱动
下载Oracle JDBC驱动(JAR文件),如ojdbc8.jar(适用于Oracle 12c及以上版本)或ojdbc6.jar(适用于Oracle 11g),将驱动文件添加到JavaWeb项目的WEB-INF/lib目录下,或通过Maven/Gradle依赖管理引入。
数据库连接方式
JavaWeb连接Oracle数据库主要有两种方式:JDBC直连和连接池。
JDBC直连
JDBC直连是基础方式,适用于简单场景,以下是关键步骤:
-
加载驱动
通过Class.forName()方法加载Oracle JDBC驱动:Class.forName("oracle.jdbc.driver.OracleDriver"); -
获取连接
使用DriverManager.getConnection()方法建立连接,参数包括数据库URL、用户名和密码:
String url = "jdbc:oracle:thin:@localhost:1521:ORCL"; // ORCL为数据库服务名 Connection conn = DriverManager.getConnection(url, "username", "password");
-
执行SQL语句
通过Connection对象创建Statement或PreparedStatement,执行查询或更新操作:String sql = "SELECT * FROM employees WHERE department_id = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, 10); // 设置参数 ResultSet rs = pstmt.executeQuery();
-
关闭资源
使用完毕后,按顺序关闭ResultSet、Statement和Connection:if (rs != null) rs.close(); if (pstmt != null) pstmt.close(); if (conn != null) conn.close();
连接池(推荐)
连接池通过复用数据库连接显著提升性能,适用于高并发场景,常用连接池包括HikariCP、Druid和C3P0。
- 以HikariCP为例
- 添加依赖:
<dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>5.0.1</version> </dependency> - 配置连接池:
HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:ORCL"); config.setUsername("username"); config.setPassword("password"); config.setMaximumPoolSize(10); // 最大连接数 HikariDataSource ds = new HikariDataSource(config); - 获取连接:
Connection conn = ds.getConnection();
- 添加依赖:
JavaWeb项目中的集成
在JavaWeb项目中,通常通过Servlet或JSP实现数据库连接,并结合MVC模式优化代码结构。
在Servlet中使用连接池
以查询员工信息为例:
@WebServlet("/employees")
public class EmployeeServlet extends HttpServlet {
private HikariDataSource ds;
@Override
public void init() throws ServletException {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:ORCL");
config.setUsername("hr");
config.setPassword("hr");
ds = new HikariDataSource(config);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try (Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM employees")) {
List<Employee> employees = new ArrayList<>();
while (rs.next()) {
Employee emp = new Employee();
emp.setId(rs.getInt("employee_id"));
emp.setName(rs.getString("employee_name"));
employees.add(emp);
}
request.setAttribute("employees", employees);
request.getRequestDispatcher("/employees.jsp").forward(request, response);
} catch (SQLException e) {
throw new ServletException("Database error", e);
}
}
@Override
public void destroy() {
if (ds != null) ds.close();
}
}
在JSP中显示数据
employees.jsp示例:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>Employees</title>
</head>
<body>
<h1>Employee List</h1>
<table border="1">
<tr>
<th>ID</th>
<th>Name</th>
</tr>
<c:forEach var="emp" items="${employees}">
<tr>
<td>${emp.id}</td>
<td>${emp.name}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
常见问题与解决方案
-
驱动加载失败

- 检查JAR文件是否正确引入,驱动类名是否匹配(如
oracle.jdbc.OracleDriver)。
- 检查JAR文件是否正确引入,驱动类名是否匹配(如
-
连接超时
检查数据库服务是否启动,网络是否通畅,或调整连接池的超时参数。
-
字符集乱码
- 在URL中指定字符集:
jdbc:oracle:thin:@localhost:1521:ORCL;characterEncoding=UTF-8。
- 在URL中指定字符集:
-
权限问题
- 确保数据库用户具有足够的权限(如
GRANT SELECT ON employees TO username;)。
- 确保数据库用户具有足够的权限(如
最佳实践
- 使用连接池:避免频繁创建和销毁连接,提升性能。
- 异常处理:捕获并记录SQL异常,避免程序崩溃。
- 资源释放:通过
try-with-resources或finally块确保资源关闭。 - 配置外部化:将数据库配置信息存放在
web.xml或application.properties中,便于维护。
通过以上步骤,JavaWeb项目可以稳定、高效地连接Oracle数据库,为业务逻辑提供可靠的数据支持。


















