关键代码是MySQL下的一条命令:select * from 表名 limit 第几页(0开始),每页的记录数;换句话说,只要改变第几页这个变量就能实现分页的浏览了。
1。建立2个Bean,一个是负责数据库连接,一个负责分页。
package DBConn; import java.sql.*; import java.lang.*;
public class MySQLConnection { private String DBDriver="com.mysql.jdbc.Driver"; private String ConnStr="jdbc:mysql://localhost:3306/zb?user=root&password=admin";
public MySQLConnection() throws java.lang.NullPointerException { try{ Class.forName(DBDriver); } catch(ClassNotFoundException e){ System.err.println(e.getMessage()); } }
public String getConnStr() { return ConnStr; } }
package DBConn; import java.sql.*; import java.lang.*; import DBConn.MySQLConnection.*;
public class PageBreak { private String ConnStr=""; private Connection conn=null; private ResultSet rs=null; private int PageSize=0;//一页几个记录 private int PageNumber=0;//页号
public PageBreak() throws java.lang.NullPointerException { MySQLConnection DBConnection=new MySQLConnection(); ConnStr=DBConnection.getConnStr();//得到ConnStr }
public ResultSet executeQuery(String sql) throws java.lang.NullPointerException { rs=null; try{ conn=DriverManager.getConnection(ConnStr); Statement stmt=conn.createStatement(); rs=stmt.executeQuery(sql); } catch(SQLException e){ System.err.println(e.getMessage()); } return rs; }
public int RecordNumber() throws java.lang.NullPointerException//得到表的记录总数 { rs=null; int ColNumber=0; try{ conn=DriverManager.getConnection(ConnStr); Statement stmt=conn.createStatement(); rs=stmt.executeQuery("select count(*) as ColNumber from User" );
while (rs.next()) { ColNumber=rs.getInt("ColNumber"); } } catch(SQLException e){ System.err.println(e.getMessage()); } return ColNumber; }
public void setPageSize(int pPageSize)//设置页面大小,并且计算出一共有多少页 { this.PageSize=pPageSize; int RecordNumber=this.RecordNumber(); this.PageNumber=(int)Math.floor(RecordNumber/PageSize); }
public int getPageSize()//得到页面大小 { return this.PageSize; }
public int getPageNumber()//得到页面数 { return this.PageNumber; }
public void Close()//显示关闭连接 { try{ conn.close(); rs.close(); } catch(SQLException e){ System.err.println(e.getMessage()); } } }
2。建立JSP页面
<%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.sql.*"%> <jsp:useBean id="DBConnection" scope="page" class="DBConn.PageBreak"/> <html> <body> <% DBConnection.setPageSize(2);//设置页面大小
int RecordPerPage=DBConnection.getPageSize();//得到页面大小 int PageNumber=DBConnection.getPageNumber();//得到页面数 int offSet=0;//Select 中的第几页,0开始 int Next=2;//连接“下一页”的初始化 int Pre=1;//连接“上一页”的初始化 int AbsolutePage=1;//绝对页面,1开始。作为连接“下一页”、“上一页”的过渡变量
if(request.getParameter("PageNo")==null)//没有参数传入,则为物理的1页,即0 offSet=0; else if(request.getParameter("PageNo")!=null) { offSet=Integer.parseInt(request.getParameter("PageNo"))-1;//有参数传入,参数为逻辑页面号,减1得物理页面号 if((offSet+1)>PageNumber)//达到最后一页 { offSet=PageNumber; AbsolutePage=PageNumber+1; Next=AbsolutePage; Pre=Next-1; } else if(offSet<1)//达到第一页 { offSet=0; AbsolutePage=offSet+1; Next=AbsolutePage+1; Pre=Next-1; } else { AbsolutePage=offSet+1; Next=AbsolutePage+1; Pre=AbsolutePage-1; } }
String QuerySQL="select * from user limit "+offSet*RecordPerPage+","+RecordPerPage;//关键代码
ResultSet RS=DBConnection.executeQuery(QuerySQL); while(RS.next()) { String userName=RS.getString("UserName"); out.print(userName+"<br>"); }
out.print("<a href='test.jsp?PageNo="+(Next)+"'>next</a><br>");//下一页 out.print("<a href='test.jsp?PageNo="+(Pre)+"'>previous</a>");//上一页
RS.close(); DBConnection.Close(); %> </body> </html>
|