jsp+mysql实现网页的分页查询

好的。要详细讲解“jsp+mysql实现网页的分页查询”的完整攻略,需要了解以下几个步骤。

第一步:建立数据库

首先,在mysql中建立我们需要的数据库,并创建一个表来存储数据。例如,创建一个学生表students,表中包括学号、姓名、性别、年龄等字段。

表的创建语句如下:

CREATE TABLE `students` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `sex` varchar(2) NOT NULL,
  `age` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

第二步:编写jsp页面

接着,需要编写一个jsp页面来实现网页的分页查询。同时,还需要引入mysql的jdbc驱动包。

下面是一个简单的示例,实现了从students表中分页查询学生信息。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>分页查询</title>
</head>
<body>
    <%
        // 引入mysql的jdbc驱动包
        Class.forName("com.mysql.jdbc.Driver");

        // 连接数据库
        String url = "jdbc:mysql://localhost:3306/test";
        String user = "root";
        String password = "123456";
        Connection conn = DriverManager.getConnection(url, user, password);

        // 获取请求参数
        int page = Integer.parseInt(request.getParameter("page"));
        int pageSize = Integer.parseInt(request.getParameter("pageSize"));

        // 查询数据
        String sql = "SELECT * FROM students LIMIT ?, ?";
        PreparedStatement pst = conn.prepareStatement(sql);
        pst.setInt(1, (page - 1) * pageSize);
        pst.setInt(2, pageSize);
        ResultSet rs = pst.executeQuery();

        // 遍历查询结果并输出
        while (rs.next()) {
            out.println("学号:" + rs.getInt("id") + ",姓名:" + rs.getString("name") + ",性别:" + rs.getString("sex") + ",年龄:" + rs.getInt("age") + "<br/>");
        }
        rs.close();
        pst.close();
        conn.close();
    %>

    <hr/>

    <% 
        // 计算总页数
        int totalCount = 50;
        int totalPage = (totalCount % pageSize == 0) ? (totalCount / pageSize) : (totalCount / pageSize + 1);
    %>
    <%
        // 输出分页信息
        for (int i = 1; i <= totalPage; i++) {
            if (page == i) {
                out.println(i);
            } else {
                out.println("<a href='?page=" + i + "&pageSize=" + pageSize +"'>" + i + "</a>");
            }
            out.print(" ");
        }
    %>
</body>
</html>

上述代码中,我们首先引入mysql的jdbc驱动包,并使用DriverManager类连接我们建立的test数据库。然后获取请求参数pagepageSize,并使用PreparedStatement类执行带有分页参数的查询语句,将查询到的结果循环输出到网页上。最后根据总记录数和每页显示的记录数,计算出总页数,将页码信息输出到网页上。

第三步:启动tomcat

最后,将编写好的jsp页面复制到tomcat服务器的webapps目录下,并启动tomcat服务器。在浏览器中输入http://localhost:8080/分页查询/index.jsp,即可查看分页查询效果。

另外,我们再给出一个示例来更好地理解这个过程。在这个示例中,我们将以上的jsp页面改为使用servlet实现分页查询。

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/StudentServlet")
public class StudentServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 引入mysql的jdbc驱动包
        try {
            Class.forName("com.mysql.jdbc.Driver");

            // 连接数据库
            String url = "jdbc:mysql://localhost:3306/test";
            String user = "root";
            String password = "123456";
            Connection conn = DriverManager.getConnection(url, user, password);

            // 获取请求参数
            int page = Integer.parseInt(request.getParameter("page"));
            int pageSize = Integer.parseInt(request.getParameter("pageSize"));

            // 查询数据
            String sql = "SELECT * FROM students LIMIT ?, ?";
            PreparedStatement pst = conn.prepareStatement(sql);
            pst.setInt(1, (page - 1) * pageSize);
            pst.setInt(2, pageSize);
            ResultSet rs = pst.executeQuery();

            // 将查询结果放入request中,转发到jsp页面进行展示
            request.setAttribute("students", rs);
            request.getRequestDispatcher("/index.jsp").forward(request, response);

            rs.close();
            pst.close();
            conn.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,我们修改了代码结构,将所有的查询操作和输出操作放到了doGet方法中,并在查询结果之后将结果放入了request的属性中,使用request对象实现了请求转发。由于servlet不直接输出html页面,因此我们还需要添加一个index.jsp页面用于展示查询结果。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>分页查询</title>
</head>
<body>
    <%
        // 输出查询结果
        ResultSet rs = (ResultSet) request.getAttribute("students");
        while (rs.next()) {
            out.println("学号:" + rs.getInt("id") + ",姓名:" + rs.getString("name") + ",性别:" + rs.getString("sex") + ",年龄:" + rs.getInt("age") + "<br/>");
        }
        rs.close();
    %>
    <hr/>

    <% 
        // 计算总页数
        int totalCount = 50;
        int totalPage = (totalCount % pageSize == 0) ? (totalCount / pageSize) : (totalCount / pageSize + 1);
    %>
    <%
        // 输出分页信息
        for (int i = 1; i <= totalPage; i++) {
            if (page == i) {
                out.println(i);
            } else {
                out.println("<a href='?page=" + i + "&pageSize=" + pageSize +"'>" + i + "</a>");
            }
            out.print(" ");
        }
    %>
</body>
</html>

在这个jsp页面中,我们从request对象中获取查询结果,并将查询结果输出到网页上。由于查询结果被放在结果集中,因此需要使用rs.next()方法进行遍历。与之前的示例相同,我们计算了总页数,并在页面中输出了分页信息。

通过以上的两个示例,我们可以更好地理解分页查询的实现过程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jsp+mysql实现网页的分页查询 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • 基于centos自己构建一个tomcat镜像的实现

    要在CentOS上构建自己的Tomcat镜像,可以按照以下步骤: 步骤1:安装Docker Docker是一种容器化平台,我们需要使用它来构建我们的Tomcat镜像。在CentOS上安装Docker的方法可以参考Docker的官方文档。 步骤2:创建一个Dockerfile 在本地创建一个文件夹,用于存储Dockerfile和相关文件,例如: $ mkdir…

    Java 2023年5月19日
    00
  • 关于Java中Json的各种处理

    Java中Json的处理攻略 Json是什么? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。JSON格式可以用来描述“键值对”(key-value)类别的数据,通常用于Web服务与Web程序之间的数据交换。 Java中Json的处理方法 1. 使用JSON库 Java中有很多处理JSON的库,比如Gson、Ja…

    Java 2023年5月26日
    00
  • MyBatisPlus分页的同时指定排序规则说明

    在使用MyBatisPlus进行分页时,可以同时指定排序规则,以保证分页结果的正确性。下面详细讲解如何进行操作。 1.在Mapper接口中定义分页查询方法 首先在Mapper接口中定义分页查询方法,方法需要使用MyBatisPlus提供的IPage来进行分页操作,示例如下: public interface MyMapper extends BaseMapp…

    Java 2023年5月20日
    00
  • 解析Java编程之Synchronized锁住的对象

    下面我将详细讲解“解析Java编程之Synchronized锁住的对象”的完整攻略。 介绍 在Java编程中,使用Synchronized关键字来进行同步控制是非常常见的路线。这个关键字提供了一种简单的方法来确保在并发代码的同时,一组代码只有一个线程可以访问。Synchronized关键字的目标对象是引用变量。 应用 要在Java编程中使用Synchroni…

    Java 2023年5月26日
    00
  • 如何进行Java性能调优?

    如何进行Java性能调优? Java性能调优主要是通过一系列的措施来减少应用程序消耗的资源,提高程序的性能。一般通过以下几个步骤来进行Java性能调优: 分析异常现象和性能问题,并定位问题根源 首先需要收集一些关键指标以判断Java应用程序的健康状况。例如:CPU使用率、内存使用率、线程数、网络I/O等等。然后根据这些指标,在出现异常或性能瓶颈的时候,对应用…

    Java 2023年5月11日
    00
  • 初探Java内部类的使用

    初探Java内部类的使用 什么是内部类 Java中的内部类,指的是定义在另一个类中的类。内部类被认为是一个单独的实体,能够访问其外部类的所有成员。因此,内部类拥有更多的访问权限及更加灵活的控制能力。 一个内部类可以具有任意的访问权限及修饰符,这其中最为关键的是private,即表示该内部类仅仅只能被它的外部类所访问。不同的内部类也拥有不同的访问权限及特殊性质…

    Java 2023年5月26日
    00
  • 关于Java中数组切片的几种方法(获取数组元素)

    首先来讲一下什么是数组切片。在Java中,数组是一组相同类型的数据所组成的有序集合。数组切片指的是从一个数组中截取一个区间来创建一个新的数组。 获取数组元素,即获取数组中的一部分元素。下面将介绍几种Java中获取数组元素的方法。 1. 直接用”[]”操作符 可以使用下标操作符”[]”来获取数组中的某个位置上的元素,例如: int[] arr = {1, 2,…

    Java 2023年5月26日
    00
  • spring 整合 mybatis 中数据源的几种配置方式(总结篇)

    下面是关于“spring 整合 mybatis 中数据源的几种配置方式(总结篇)”的完整攻略: 1. 简介 在Java项目中,数据源是一个非常重要的组成部分,而MyBatis是一款数据库框架,而Spring是一个很不错的框架,其中,Spring可以与MyBatis进行整合,提供便捷的数据访问功能,其中数据源的配置是一个重要环节。 在这篇攻略中,我们将会全面讲…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部