jsp连接数据库java代码怎么写?新手必看步骤详解

在JSP(JavaServer Pages)中连接数据库是Web开发中的常见需求,通常通过JavaBean或Servlet实现业务逻辑与数据访问的分离,确保代码的可维护性和安全性,以下是详细的步骤和示例说明,涵盖环境准备、数据库连接方式、代码实现及常见问题处理。

环境准备

  1. 开发工具:安装JDK(建议1.8及以上版本)、IDE(如Eclipse或IntelliJ IDEA)、Web服务器(如Tomcat)。
  2. 数据库:选择数据库(如MySQL、Oracle等),并安装对应的JDBC驱动,MySQL需下载mysql-connector-java-x.x.x.jar,并将其放入项目的WEB-INF/lib目录下。
  3. 项目结构:在IDE中创建Dynamic Web Project,确保src目录存放Java类,WebContent存放JSP页面。

数据库连接方式

JSP本身不直接处理数据库连接,而是通过Java代码(如Scriptlet或JavaBean)调用JDBC(Java Database Connectivity) API实现,以下是两种主流方式:

使用Scriptlet直接连接(不推荐)

在JSP页面中嵌入Java代码,直接实现数据库操作,这种方式会导致代码混乱,难以维护。

<%@ page import="java.sql.*" %>
<%
    Connection conn = null;
    try {
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC";
        String user = "root";
        String password = "123456";
        conn = DriverManager.getConnection(url, user, password);
        Statement stmt = conn.createStatement();
        String sql = "SELECT * FROM users";
        ResultSet rs = stmt.executeQuery(sql);
        while (rs.next()) {
            out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name"));
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (conn != null) conn.close();
    }
%>

使用JavaBean封装连接(推荐)

将数据库操作封装到JavaBean中,JSP通过调用Bean的方法实现连接,实现逻辑分离。

步骤

jsp怎么和java连接数据库

  1. 创建JavaBean(如DBUtil.java):

    package util;
    import java.sql.*;
    public class DBUtil {
     private static final String URL = "jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC";
     private static final String USER = "root";
     private static final String PASSWORD = "123456";
     static {
         try {
             Class.forName("com.mysql.cj.jdbc.Driver");
         } catch (ClassNotFoundException e) {
             e.printStackTrace();
         }
     }
     public static Connection getConnection() throws SQLException {
         return DriverManager.getConnection(URL, USER, PASSWORD);
     }
     public static void close(Connection conn, Statement stmt, ResultSet rs) {
         try {
             if (rs != null) rs.close();
             if (stmt != null) stmt.close();
             if (conn != null) conn.close();
         } catch (SQLException e) {
             e.printStackTrace();
         }
     }
    }
  2. 在JSP中使用JavaBean

    <%@ page import="util.DBUtil" %>
    <jsp:useBean id="dbUtil" class="util.DBUtil" scope="page" />
    <%
     Connection conn = null;
     Statement stmt = null;
     ResultSet rs = null;
     try {
         conn = dbUtil.getConnection();
         stmt = conn.createStatement();
         String sql = "SELECT * FROM users";
         rs = stmt.executeQuery(sql);
         while (rs.next()) {
             out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name"));
         }
     } catch (SQLException e) {
         e.printStackTrace();
     } finally {
         dbUtil.close(conn, stmt, rs);
     }
    %>

连接池优化(提高性能)

直接使用DriverManager连接数据库效率较低,推荐使用连接池(如Apache DBCP、C3P0或HikariCP),以下是HikariCP的示例:

  1. 添加依赖:在pom.xml中引入HikariCP和MySQL驱动:

    jsp怎么和java连接数据库

    <dependency>
     <groupId>com.zaxxer</groupId>
     <artifactId>HikariCP</artifactId>
     <version>5.0.1</version>
    </dependency>
    <dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>8.0.33</version>
    </dependency>
  2. 配置连接池

    import com.zaxxer.hikari.HikariConfig;
    import com.zaxxer.hikari.HikariDataSource;
    import java.sql.Connection;
    import java.sql.SQLException;
    public class HikariUtil {
     private static HikariDataSource dataSource;
     static {
         HikariConfig config = new HikariConfig();
         config.setJdbcUrl("jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC");
         config.setUsername("root");
         config.setPassword("123456");
         config.setDriverClassName("com.mysql.cj.jdbc.Driver");
         config.setMaximumPoolSize(10);
         dataSource = new HikariDataSource(config);
     }
     public static Connection getConnection() throws SQLException {
         return dataSource.getConnection();
     }
    }
  3. 在JSP中使用连接池

    <%@ page import="util.HikariUtil" %>
    <%
     Connection conn = null;
     try {
         conn = HikariUtil.getConnection();
         // 执行数据库操作
     } catch (SQLException e) {
         e.printStackTrace();
     } finally {
         if (conn != null) conn.close();
     }
    %>

常见问题与解决方案

  1. 中文乱码问题

    • 原因:数据库、JSP页面、连接URL未统一编码。
    • 解决:在URL中添加useUnicode=true&characterEncoding=UTF-8,JSP页面设置<%@ page contentType="text/html;charset=UTF-8" %>
  2. 连接泄露问题

    jsp怎么和java连接数据库

    • 原因:未关闭ConnectionStatementResultSet
    • 解决:使用try-finallytry-with-resources确保资源释放。

相关问答FAQs

问题1:JSP中如何避免数据库连接泄露?
解答
数据库连接泄露会导致连接池耗尽,影响系统性能,解决方案包括:

  1. 使用try-finallytry-with-resources(Java 7+)确保ConnectionStatementResultSet关闭。
  2. 使用连接池(如HikariCP)并设置合理的超时时间,自动回收未释放的连接。
  3. 在JavaBean中封装关闭逻辑,如DBUtil.close()方法。

问题2:为什么推荐使用JavaBean而非Scriptlet连接数据库?
解答
Scriptlet将Java代码嵌入JSP,导致页面逻辑混乱,难以维护;而JavaBean实现逻辑分离,优势包括:

  1. 代码复用:数据库操作可在多个JSP页面中复用。
  2. 可维护性:修改连接逻辑只需调整JavaBean,无需改动JSP。
  3. 安全性:避免直接在JSP中暴露数据库密码等敏感信息。
  4. MVC模式:符合Model-View-Controller架构,提升代码结构清晰度。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-09-16 03:22
下一篇 2025-09-16 03:40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信