jsp界面如何查询数据库数据?实现步骤有哪些?

在JSP界面中查询数据库数据是Web开发中的常见需求,通常通过结合JSP、JavaBean(或POJO)以及JDBC(Java Database Connectivity)技术来实现,以下是详细的步骤和代码示例,帮助理解如何完成这一过程。

环境准备

在开始之前,确保已安装以下工具和库:

  • JDK:Java开发工具包,建议版本1.8或更高。
  • Web服务器:如Apache Tomcat,用于部署和运行JSP应用。
  • 数据库:如MySQL、Oracle等,并已创建测试数据库和表。
  • JDBC驱动:对应数据库的JDBC连接库(如MySQL的mysql-connector-java.jar),需将其放置在Tomcat的lib目录下或项目的WEB-INF/lib目录中。

数据库表设计

以MySQL为例,创建一个简单的用户表user_info

CREATE TABLE user_info (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    age INT,
    email VARCHAR(100)
);

插入一些测试数据:

INSERT INTO user_info (username, age, email) VALUES 
('张三', 25, 'zhangsan@example.com'),
('李四', 30, 'lisi@example.com'),
('王五', 28, 'wangwu@example.com');

创建数据库连接工具类

为了复用数据库连接代码,编写一个DBUtil类:

怎么jsp界面查询数据库数据

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBUtil {
    private static final String URL = "jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC";
    private static final String USER = "root";
    private static final String PASSWORD = "your_password";
    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 closeConnection(Connection conn) {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

创建数据访问对象(DAO)

DAO负责与数据库交互,实现查询逻辑,以下是UserDAO类:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class UserDAO {
    public List<User> getAllUsers() {
        List<User> users = new ArrayList<>();
        String sql = "SELECT id, username, age, email FROM user_info";
        try (Connection conn = DBUtil.getConnection();
             PreparedStatement pstmt = conn.prepareStatement(sql);
             ResultSet rs = pstmt.executeQuery()) {
            while (rs.next()) {
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setUsername(rs.getString("username"));
                user.setAge(rs.getInt("age"));
                user.setEmail(rs.getString("email"));
                users.add(user);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return users;
    }
}

创建实体类(JavaBean)

User类用于封装用户数据:

public class User {
    private int id;
    private String username;
    private int age;
    private String email;
    // Getters and Setters
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getUsername() { return username; }
    public void setUsername(String username) { this.username = username; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
}

编写JSP页面

index.jsp中,通过<jsp:useBean><jsp:getProperty>标签获取数据并展示:

<%@ page import="java.util.List" %>
<%@ page import="com.example.User" %>
<%@ page import="com.example.UserDAO" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>用户列表</title>
    <style>
        table { border-collapse: collapse; width: 100%; }
        th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
        th { background-color: #f2f2f2; }
    </style>
</head>
<body>
    <h1>用户信息列表</h1>
    <table>
        <tr>
            <th>ID</th>
            <th>用户名</th>
            <th>年龄</th>
            <th>邮箱</th>
        </tr>
        <%
            UserDAO userDAO = new UserDAO();
            List<User> users = userDAO.getAllUsers();
            for (User user : users) {
        %>
        <tr>
            <td><%= user.getId() %></td>
            <td><%= user.getUsername() %></td>
            <td><%= user.getAge() %></td>
            <td><%= user.getEmail() %></td>
        </tr>
        <%
            }
        %>
    </table>
</body>
</html>

部署与运行

  1. 将项目打包为WAR文件,部署到Tomcat的webapps目录。
  2. 启动Tomcat,访问http://localhost:8080/your_project_name/index.jsp,即可看到用户数据表格。

优化与扩展

  • 分页查询:通过SQL的LIMITOFFSET实现分页功能。
  • 条件查询:在JSP页面添加搜索表单,通过request.getParameter()获取查询条件,动态构建SQL语句。
  • 异常处理:在DAO层添加try-catch块,避免因数据库错误导致页面崩溃。
  • 连接池:使用HikariCPDBCP等连接池技术提高数据库连接效率。

相关操作流程表

步骤 技术要点
1 环境搭建 安装JDK、Tomcat、数据库,导入JDBC驱动
2 数据库设计 创建表并插入测试数据
3 工具类编写 实现DBUtil管理数据库连接
4 DAO实现 编写UserDAO查询数据库
5 实体类创建 定义User类封装数据
6 JSP页面开发 使用JSP标签展示数据
7 部署测试 部署到Tomcat并访问验证

FAQs

问题1:JSP页面中如何处理中文乱码?
解答:
在JSP页面顶部添加以下指令,确保页面编码为UTF-8:

怎么jsp界面查询数据库数据

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

web.xml中配置字符编码过滤器:

<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

问题2:如何实现带条件(如按用户名搜索)的查询?
解答:

  1. 在JSP页面添加搜索表单:

    <form action="search.jsp" method="get">
     <input type="text" name="username" placeholder="输入用户名">
     <button type="submit">搜索</button>
    </form>
  2. search.jsp中获取参数并调用DAO:

    怎么jsp界面查询数据库数据

    <%
     String username = request.getParameter("username");
     UserDAO userDAO = new UserDAO();
     List<User> users = userDAO.searchUsers(username);
     // 展示结果(同index.jsp)
    %>
  3. UserDAO中添加searchUsers方法:

    public List<User> searchUsers(String username) {
     List<User> users = new ArrayList<>();
     String sql = "SELECT id, username, age, email FROM user_info WHERE username LIKE ?";
     try (Connection conn = DBUtil.getConnection();
          PreparedStatement pstmt = conn.prepareStatement(sql)) {
         pstmt.setString(1, "%" + username + "%");
         ResultSet rs = pstmt.executeQuery();
         while (rs.next()) {
             User user = new User();
             user.setId(rs.getInt("id"));
             user.setUsername(rs.getString("username"));
             user.setAge(rs.getInt("age"));
             user.setEmail(rs.getString("email"));
             users.add(user);
         }
     } catch (SQLException e) {
         e.printStackTrace();
     }
     return users;
    }

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

(0)
热舞的头像热舞
上一篇 2025-09-21 06:54
下一篇 2025-09-21 07:17

发表回复

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

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

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

关注微信