JSP实现数据库表数据分页显示并添加模糊匹配查询

一、JSP实现数据库表数据分页显示大致有两种方式:

  1. 取出符合条件的数据,放在数据结构或内存中,然后按页数和每页显示的数量进行浏览。举个栗子,假如当前有50条数据,我们需要查看第二页,每页显示20条数据,则我们需要查看的是50条数据中第 (2 - 1) * 20 + 1 条到第 2 * 20 条数据,这个比较好理解;
  2. 需要多少数据取多少数据,在查询数据库时仅查询当前页数需要显示的数据,可以利用SQL语句如 limit 来实现。举个栗子,假如我们需要查看第二页,每页显示20条数据,则使用的SQL语句应该是 SELECT * FROM table LIMIT 21, 20;

二、实现模糊匹配查询:

  • 使用MySQL中的LOCATE语句实现模糊匹配查询功能;

如下代码使用了第一种方式实现分页功能以及模糊匹配查询功能:

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2018/8/7
  Time: 16:38
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.nio.charset.StandardCharsets" %>


    Fisherman 的主页


使用 JSP 分页列出 emp 表数据

<%! class Employee { private int empno; private String ename; private String job; private String hiredate; private float sal; private float comm; Employee(int empno, String ename, String job, String hiredate, float sal, float comm) { this.empno = empno; this.ename = ename; this.job = job; this.hiredate = hiredate; this.sal = sal; this.comm = comm; } int getEmpno() { return empno; } String getEname() { return ename; } String getJob() { return job; } String getHiredate() { return hiredate; } float getSal() { return sal; } float getComm() { return comm; } } %> <% String URL = "jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&serverTimeZone=UTC"; String USERNAME = "root"; String PASSWORD = "Root1234"; String DRIVER = "com.mysql.jdbc.Driver"; %> <% Connection conn = null; Statement stat = null; ResultSet rs = null; %> <% try { Class.forName(DRIVER); conn = DriverManager.getConnection(URL, USERNAME, PASSWORD); stat = conn.createStatement(); // get query name from request String rawString = request.getParameter("ename"); String rawQuery; StringBuilder sql = new StringBuilder(); if (rawString == null || rawString.equals("")) { sql.append("SELECT * FROM emp"); rawQuery = "page_list_emp.jsp?"; } else { String queryName = new String(rawString.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); sql.append("SELECT * FROM emp WHERE LOCATE(").append("'").append(queryName).append("'").append(", ename) > 0"); rawQuery = "page_list_emp.jsp?ename=" + queryName + "&"; } rs = stat.executeQuery(sql.toString()); %> <% List employeeList = new ArrayList(); while (rs.next()) { int empno = rs.getInt(1); String ename = rs.getString(2); String job = rs.getString(3); Date hiredate = rs.getDate(4); float sal = rs.getFloat(5); float comm = rs.getFloat(6); employeeList.add(new Employee(empno, ename, job, hiredate.toString(), sal, comm)); } %> <% int pageNum = employeeList.size(); int pageSize = 5; String strNum = request.getParameter("pageNum"); // get current page number int number; if (strNum == null || strNum.equals("0")) { number = 1; } else { number = Integer.parseInt(strNum); } int maxPage; if (pageNum % 5 == 0) { maxPage = pageNum / 5; } else { maxPage = pageNum / 5 + 1; } if (number > maxPage) { number = maxPage; } int start = (number - 1) * pageSize; int end = number * pageSize; if (end > pageNum) { end = pageNum; } %> <% for (int j = start; j < end; j++) { Employee emp = (Employee) employeeList.get(j); %> <% } %>
共<%=maxPage%>页 共<%=pageNum%>条记录 当前是第<%=number%>页  首页  上一页  下一页  末页
雇员姓名:
雇员编号 雇员姓名 雇员职务 雇员工资 雇用日期 雇员奖金
<%=emp.getEmpno()%> <%=emp.getEname()%> <%=emp.getJob()%> <%=emp.getSal()%> <%=emp.getHiredate()%> <%=emp.getComm()%>
<% } catch (Exception ex) { ex.printStackTrace(); } finally { try { if (rs != null) { rs.close(); } if (conn != null) { conn.close(); } if (stat != null) { stat.close(); } } catch (SQLException e) { e.printStackTrace(); } } %>

创建表的SQL脚本:

CREATE TABLE emp (
    empno INT AUTO INCREMENT NOT NULL PRIMARY KEY,
    ename VARCHAR(10) NOT NULL,
    job VARCHAR(9) NOT NULL,
    hiredate DATE NOT NULL,
    sal FLOAT NOT NULL,
    comm FLOAT NOT NULL
) ENGINE=INNODB CHARSET=UTF8;

 

你可能感兴趣的:(Java,mysql)