当前位置:首页 > 后端开发 > 正文

JSP与Java如何连数据库?

在JSP中通过JDBC连接数据库:加载驱动(如com.mysql.jdbc.Driver),使用DriverManager.getConnection()建立连接,传入URL、用户名和密码,创建Statement执行SQL,处理结果集后关闭资源,推荐使用连接池优化性能。

在JSP和Java中连接数据库主要依赖JDBC(Java Database Connectivity) 技术,以下是详细步骤和最佳实践,符合现代开发规范:

核心步骤:JDBC连接数据库

准备工作

  • 数据库驱动:下载对应数据库的JDBC驱动(如MySQL:mysql-connector-java
  • 导入驱动:将JAR文件放入项目的/WEB-INF/lib目录

四步连接流程

<%-- JSP页面中的Java代码示例(实际开发建议分离到Servlet) --%> <%@ page import="java.sql.*" %> <% try { // 1. 加载驱动(MySQL示例) Class.forName("com.mysql.cj.jdbc.Driver"); // 2. 建立连接 String url = "jdbc:mysql://localhost:3306/你的数据库名?useSSL=false&serverTimezone=UTC"; String user = "用户名"; String password = "密码"; Connection conn = DriverManager.getConnection(url, user, password); // 3. 执行SQL Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM users"); // 4. 处理结果 while (rs.next()) { out.print("ID: " + rs.getInt("id") + "<br>"); } // 5. 关闭资源(反向顺序) rs.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } %>


最佳实践:分层架构(MVC)

避免在JSP中直接写JDBC代码,推荐结构:

JSP(View) → Servlet(Controller) → DAO类(Model) → 数据库

创建DAO类(Data Access Object)

// UserDAO.java public class UserDAO { private static final String URL = "jdbc:mysql://localhost:3306/mydb"; public List<User> getUsers() throws SQLException { List<User> users = new ArrayList<>(); try (Connection conn = DriverManager.getConnection(URL, "user", "pass"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM users")) { while (rs.next()) { users.add(new User(rs.getInt("id"), rs.getString("name"))); } } return users; } }

Servlet调用DAO

// UserServlet.java protected void doGet(HttpServletRequest request, HttpServletResponse response) { try { List<User> users = new UserDAO().getUsers(); request.setAttribute("users", users); request.getRequestDispatcher("/users.jsp").forward(request, response); } catch (SQLException e) { e.printStackTrace(); } }

JSP仅负责显示

<%-- users.jsp --%> <c:forEach items="${users}" var="user"> <p>${user.id}: ${user.name}</p> </c:forEach>


高级优化方案

使用连接池(如HikariCP)

// 配置连接池 HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost/mydb"); config.setUsername("user"); config.setPassword("pass"); HikariDataSource ds = new HikariDataSource(config); // 获取连接 try (Connection conn = ds.getConnection()) { // 执行操作... }

防SQL载入

使用PreparedStatement替代Statement

JSP与Java如何连数据库? 第1张

配置外部属性文件

将数据库配置存入db.properties:

JSP与Java如何连数据库? 第2张

jdbc.url=jdbc:mysql://localhost:3306/mydb jdbc.user=root jdbc.password=123456

通过ResourceBundle或Spring加载配置。


常见错误排查

错误现象 解决方案
ClassNotFoundException 检查驱动JAR是否在WEB-INF/lib下
SQLException: Access denied 核对用户名/密码及数据库权限
连接超时 检查数据库地址、端口、防火墙设置
中文乱码 连接URL添加?characterEncoding=UTF-8


安全与性能建议

  1. 资源释放:使用try-with-resources自动关闭连接(Java 7+)
  2. 避免明文密码:使用环境变量或加密配置
  3. SQL载入防护:始终用PreparedStatement处理用户输入
  4. 连接池必用:减少频繁连接开销(推荐HikariCP或Tomcat JDBC Pool)


JSP通过JDBC连接数据库是Java Web开发的基础能力,但务必遵循分层设计

  • JSP专注视图展示
  • 业务逻辑交给Servlet
  • 数据库操作封装到DAO类
  • 连接池管理资源

引用说明基于Oracle官方JDBC文档、MySQL Connector/J文档及HikariCP最佳实践,技术细节参考《Head First Servlets and JSP》(O’Reilly)及Java EE规范。

JSP与Java如何连数据库? 第3张

0