自我提升——分页

最近的一切都堆在了一起,事情很多,真正学习的时间很少,每天都在四处奔波,哎,这和我想象的修仙一般的大学生活不一样(一毛都不一样),不说了,实现我自己的分页功能吧


实现是通过JDBC、Servlet、JSP实现的,初学者,不至于用那么高大上的方法——>主要是不会、看不懂,看不懂就等于不会用

先配置一个基本的文件

//一个基本的信息
public class pageInformation {
     
    //当前页数
    private int page;
    //总页数
    private int sumPage;
    
    public int getPage() {
     
        return page;
    }

    public void setPage(int page) {
     
        this.page = page;
    }
  
    public int getSumPage() {
     
        return sumPage;
    }

    public void setSumPage(int sumPage) {
     
        this.sumPage = sumPage;
    }

}

再创建一个对象后,我们还需要运用SQL语句,SQL语句中存在一个limit 关键字,这个关键字后面跟两个参数,对一个参数表示的是起始位置,而后一个参数表示往后读取几个数据。此外,还需要明白,在MySQL中是从0开始的。

String sql="select * from user order by id limit 0,5";

这个语句表示从第一个开始,读取后面的五个数据。
因此我们可以得到一个公式,第N页的数据是从第(N-1)x Q 这宫里的Q是自己进行设计的,表示的是,往下读据几个数据,起使就是上面sql语句中的“5”。
在了解到这个特性后,我们开始进行对总页进行计算,但是我们得先知道数据的总数,方便后面的除法运算

select count(*) as count from user; 

这是一个SQL语句,它的作用是查询你的这个表中的数据总量,可以通过JDBC来获取数据的总数量。

			//这里的number就是总数
            //ResultSet rs=null;
       		//PreparedStatement ps=null;
       		//int number =0;
 String sql="select count(*) as count from data";
            ps=conn.prepareStatement(sql);
            rs=ps.executeQuery();
            if (rs.next()) {
     
            //作用是通过强转,将其转化为int型
                number=Integer.valueOf(rs.getString("count")) ;
            }

通过上述方法我们便可以获取数据的总量。
在这里我们需要知道,当数据不能够整除的时候,需要将页数+1,否则,你会发现,当数据不能够整除的时候,你的数据展示总会少那么几个。

//这李就开始了对页数进行了计算,后面的3是我自己随手写的,主要是自
//己不想敲数据库,希望理解
 if (number % 3 != 0) {
     
 //当能够被3整除,则总页数就是整数,反之就是得到的整数+1
            sumUser=number/3+1;
        }else{
     
            sumUser=number/3;
        }

现在我们有了总页数、总数据量,那么剩下的就是在JSP页面进行展示了,那么怎么展示呢,我这里选择把部分代码写到了JSP页面上,这确实是我自己的错,因为一个合格的Java程序员不能在自己的JSP页面上出现一行Java代码 ,我反思,我检讨,下次就改
言归正传,我这里在运用了一个session,这个session的作用就是把你想要的页数给传进来,在完成他的任务之后就顺手把他给清除了,省的下次再访问页面时由于session的与原因访问的页面不是从第一页开始的。

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
//此处是一个注解,注解之后可不用去XML文件中进行配置了
@WebServlet("/paging")
public class paging extends HttpServlet {
     
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse
     resp) throws ServletException, IOException {
     
    //获取想要访问的页数
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        pageInformation pageInformation=new pageInformation();
        int page= Integer.parseInt(req.getParameter("page"));
        sumPage sumPage=new sumPage();
        //设置总页数
        pageInformation.setSumPage(sumPage.sumPage());
        if (page>=pageInformation.getSumPage()){
     
            page=pageInformation.getSumPage()-1;
        }
        if (page<0){
     
            page=0;
        }
        //Session的设置
        HttpSession session=req.getSession(true);
        session.setAttribute("page",page);
        resp.sendRedirect(req.getContextPath()+"/Watch/show01.jsp");
    }
}

在我们的JSP页面则有读取这个session、清空session的语句,线面的这行代码其实就是为了把这个页数按钮给打印出来

<form method="get" action="${pageContext.request.contextPath}/paging">
<table>
<tr>
    <th>
        <td>
        <%--这个首页起使就是从0开始,我们直接设置为0--%>
    <button name="page" value="0">首页</button>
        </td>
    <td>
        <button name="page" value="<%=num-1%>">上一页</button>
    </td>
    <%
        pageInformation pageInformation=new pageInformation();
        sumPage sumPage=new sumPage();
        pageInformation.setSumPage(sumPage.sumPage());
        <%--这个for循环的作用就是输出咱们的页数按钮,省力得很--%>
        for (int i = 0; i< pageInformation.getSumPage(); i++){
     
%>
    <td>
        <button name="page" value="<%=i%>"><%=i+1%></button>
    </td>
    <%
        }
    %>
    <td>
        <button name="page" value="<%=num+1%>">下一页</button>
    </td>
    <td>
    <%--尾页运用了和首页相同的原理,无非就是这个是总页数-1--%>
        <button name="page" value="<%=pageInformation.getSumPage()-1%>">尾页</button>
    </td>

    </th>
</tr>
</table>
</form>

在这个开头,我们需要从0开始(或者说从第一页开始),这时候我们没有这个session,即这个session为null;,根据这一特性,我们可以这样子判断

	//这里的request 什么的不详细介绍了
	request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
    int num=0;
    //判断session是否为null;如果为null;则num的之没有改变
    //切记补腰强转后再进行判断,否则会报错、会报错、会报错!!!
    if (session.getAttribute("page")!=null){
     
            num= (int) session.getAttribute("page");
            session.removeAttribute("page");
        }

在这里我们获取了我们的需要的页码,只需要在sql语句中传入即可

String sql="select * from filepath order by id limit ?,3";
        ps=conn.prepareStatement(sql);
        ps.setInt(1,num*3);
        ps.executeQuery();
        rs=ps.executeQuery();

好了好了就这么多了,其中该怎么填写,就靠自己了,我这里是一个信息的展示,不好意思去泄露信息2333

你可能感兴趣的:(自我提升,mysql,java)