昨天看到一篇《纯JSP分页代码 》的文章,是用于mysql,稍微修改下,用于Sqlserver2005/2008,没有异常处理。没有考虑性能等。
现将代码贴出,以供初学者参考:
注:邀月使用环境Eclipse 3.4.2+Tomcat 6.18+Sqlserver2005 sp3调试成功。
页面pagelistDemo.jsp内容:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% //连接字符串 String url = "jdbc:sqlserver://" + Globals.Server + ";databaseName=" + Globals.DbName; Class.forName(Globals.driverName).newInstance(); Connection connection = DriverManager.getConnection(url, Globals.username, Globals.pwd); Statement statement = connection.createStatement(); //每页显示记录数 int PageSize = 10; int StartRow = 0; //开始显示记录的编号 int PageNo = 0;//需要显示的页数 int CounterStart = 0;//每页页码的初始值 int CounterEnd = 0;//显示页码的最大值 int RecordCount = 0;//总记录数; int MaxPage = 0;//总页数 int PrevStart = 0;//前一页 int NextPage = 0;//下一页 int LastRec = 0; int LastStartRecord = 0;//最后一页开始显示记录的编号 //获取需要显示的页数,由用户提交 if (request.getParameter("PageNo") == null) { //如果为空,则表示第1页 if (StartRow == 0) { PageNo = StartRow + 1; //设定为1 } } else { PageNo = Integer.parseInt(request.getParameter("PageNo")); //获得用户提交的页数 StartRow = (PageNo - 1) * PageSize; //获得开始显示的记录编号 } //因为显示页码的数量是动态变化的,假如总共有一百页,则不可能同时显示100个链接。而是根据当前的页数显示 //一定数量的页面链接 //设置显示页码的初始值!! if (PageNo % PageSize == 0) { CounterStart = PageNo - (PageSize - 1); } else { CounterStart = PageNo - (PageNo % PageSize) + 1; } CounterEnd = CounterStart + (PageSize - 1); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@page import="net.data.util.Globals"%> <%@page import="java.sql.ResultSet"%> <%@page import="java.sql.DriverManager"%> <%@page import="java.sql.Connection"%> <%@page import="java.sql.Statement"%> <element> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>分页显示记录</title> <link rel="stylesheet" href="style.css" mce_href="style.css" type="text/css"> </head> <% //获取总记录数 ResultSet rs = statement .executeQuery("select count(P_ID) from product"); rs.next(); RecordCount = rs.getInt(1); //取特定页数的数据 String strColumn = " P_ID,P_Name,LoginID,modTime,P_SingleIntro "; String strTable = " Product "; String strSort = " p_ID desc "; String PKID = "P_ID"; String strSql = ""; String strWhere = ""; String START_ID = Integer.toString((PageNo - 1) * PageSize + 1); String END_ID = Integer.toString(PageNo * PageSize); strSql = " SELECT " + strColumn + " FROM (SELECT ROW_NUMBER() OVER(ORDER BY " + strSort + ") AS rownum," + strColumn + " FROM " + strTable + " WITH(NOLOCK) " + strWhere + ") AS D WHERE rownum BETWEEN " + START_ID + " AND " + END_ID + " ORDER BY " + strSort; rs = statement.executeQuery(strSql); //获取总页数 MaxPage = RecordCount % PageSize; if (RecordCount % PageSize == 0) { MaxPage = RecordCount / PageSize; } else { MaxPage = RecordCount / PageSize + 1; } %> <body class="UsePageBg"> <table width="100%" border="0" class="InternalHeader"> <tr> <td width="24%"><font size=4>分页显示记录</font></td> <td width="76%"><font size=4><%="总共" + RecordCount + "条记录 - 当前页:" + PageNo + "/" + MaxPage%></font></td> </tr> </table> <br> <table width="100%" border="0" class="NormalTableTwo"> <tr> <td class="InternalHeader">记录序号</td> <td class="InternalHeader">数据标识号</td> <td class="InternalHeader">产品名称</td> <td class="InternalHeader">作者</td> <td class="InternalHeader">提交时间</td> <td class="InternalHeader">简介</td> </tr> <% long i = 1; while (rs.next()) { long bil = i + (PageNo - 1) * PageSize; %> <tr> <td class="NormalFieldTwo"><%=bil%></td> <td class="NormalFieldTwo"><%=rs.getString(1)%></td> <td class="NormalFieldTwo"><%=rs.getString(2)%></td> <td class="NormalFieldTwo"><%=rs.getString(3)%></td> <td class="NormalFieldTwo"><%=rs.getString(4)%></td> <td class="NormalFieldTwo"><%=rs.getString(5)%></td> </tr> <% i++; } %> </table> <br> <table width="100%" border="0" class="InternalHeader"> <tr> <td> <div align="center"> <% out.print("<font size=4>"); //显示第一页或者前一页的链接 //如果当前页不是第1页,则显示第一页和前一页的链接 if (PageNo != 1) { PrevStart = PageNo - 1; out.print("<a href="pagelistDemo.jsp?PageNo=1" mce_href="pagelistDemo.jsp?PageNo=1">第一页 </a>: "); out.print("<a href="pagelistDemo.jsp?PageNo=" mce_href="pagelistDemo.jsp?PageNo="" + PrevStart + ">前一页</a>"); } out.print("["); //打印需要显示的页码 for (int c = CounterStart; c <= CounterEnd; c++) { if (c < MaxPage) { if (c == PageNo) { if (c % PageSize == 0) { out.print(c); } else { out.print(c + " ,"); } } else if (c % PageSize == 0) { out.print("<a href="pagelistDemo.jsp?PageNo=" mce_href="pagelistDemo.jsp?PageNo="" + c + ">" + c + "</a>"); } else { out.print("<a href="pagelistDemo.jsp?PageNo=" mce_href="pagelistDemo.jsp?PageNo="" + c + ">" + c + "</a> ,"); } } else { if (PageNo == MaxPage) { out.print(c); break; } else { out.print("<a href="pagelistDemo.jsp?PageNo=" mce_href="pagelistDemo.jsp?PageNo="" + c + ">" + c + "</a>"); break; } } } out.print("]"); ; if (PageNo < MaxPage) { //如果当前页不是最后一页,则显示下一页链接 NextPage = PageNo + 1; out.print("<a href="pagelistDemo.jsp?PageNo=" mce_href="pagelistDemo.jsp?PageNo="" + NextPage + ">下一页</a>"); } //同时如果当前页不是最后一页,要显示最后一页的链接 if (PageNo < MaxPage) { LastRec = RecordCount % PageSize; if (LastRec == 0) { LastStartRecord = RecordCount - PageSize; } else { LastStartRecord = RecordCount - LastRec; } out.print(":"); out.print("<a href="pagelistDemo.jsp?PageNo=" mce_href="pagelistDemo.jsp?PageNo="" + MaxPage + ">最后一页</a>"); } out.print("</font>"); %> </div> </td> </tr> </table> <% rs.close(); statement.close(); connection.close(); %> </body> </html> <!-- {cps..0}--><% @pagelanguage = " java " contentType = " text/html;charset=UTF-8 " pageEncoding = " UTF-8 " %> <% // 连接字符串 Stringurl = " jdbc:sqlserver:// " + Globals.Server + " ;databaseName= " + Globals.DbName; Class.forName(Globals.driverName).newInstance(); Connectionconnection = DriverManager.getConnection(url, Globals.username,Globals.pwd); Statementstatement = connection.createStatement(); // 每页显示记录数 int PageSize = 10 ; int StartRow = 0 ; // 开始显示记录的编号 int PageNo = 0 ; // 需要显示的页数 int CounterStart = 0 ; // 每页页码的初始值 int CounterEnd = 0 ; // 显示页码的最大值 int RecordCount = 0 ; // 总记录数; int MaxPage = 0 ; // 总页数 int PrevStart = 0 ; // 前一页 int NextPage = 0 ; // 下一页 int LastRec = 0 ; int LastStartRecord = 0 ; // 最后一页开始显示记录的编号 // 获取需要显示的页数,由用户提交 if (request.getParameter( " PageNo " ) == null ) { // 如果为空,则表示第1页 if (StartRow == 0 ) { PageNo = StartRow + 1 ; // 设定为1 } } else { PageNo = Integer.parseInt(request.getParameter( " PageNo " )); // 获得用户提交的页数 StartRow = (PageNo - 1 ) * PageSize; // 获得开始显示的记录编号 } // 因为显示页码的数量是动态变化的,假如总共有一百页,则不可能同时显示100个链接。而是根据当前的页数显示 // 一定数量的页面链接 // 设置显示页码的初始值!! if (PageNo % PageSize == 0 ) { CounterStart = PageNo - (PageSize - 1 ); } else { CounterStart = PageNo - (PageNo % PageSize) + 1 ; } CounterEnd = CounterStart + (PageSize - 1 ); %> <! DOCTYPEhtmlPUBLIC " -//W3C//DTDHTML4.01Transitional//EN " " http://www.w3.org/TR/html4/loose.dtd " > <% @page import = " net.data.util.Globals " %> <% @page import = " java.sql.ResultSet " %> <% @page import = " java.sql.DriverManager " %> <% @page import = " java.sql.Connection " %> <% @page import = " java.sql.Statement " %> < element > < html > < head > < metahttp - equiv = " Content-Type " content = " text/html;charset=UTF-8 " > < title > 分页显示记录 </ title > < linkrel = " stylesheet " href = " style.css " type = " text/css " > </ head > <% // 获取总记录数 ResultSetrs = statement .executeQuery( " selectcount(P_ID)fromproduct " ); rs.next(); RecordCount = rs.getInt( 1 ); // 取特定页数的数据 StringstrColumn = " P_ID,P_Name,LoginID,modTime,P_SingleIntro " ; StringstrTable = " Product " ; StringstrSort = " p_IDdesc " ; StringPKID = " P_ID " ; StringstrSql = "" ; StringstrWhere = "" ; StringSTART_ID = Integer.toString((PageNo - 1 ) * PageSize + 1 ); StringEND_ID = Integer.toString(PageNo * PageSize); strSql = " SELECT " + strColumn + " FROM(SELECTROW_NUMBER()OVER(ORDERBY " + strSort + " )ASrownum, " + strColumn + " FROM " + strTable + " WITH(NOLOCK) " + strWhere + " )ASDWHERErownumBETWEEN " + START_ID + " AND " + END_ID + " ORDERBY " + strSort; rs = statement.executeQuery(strSql); // 获取总页数 MaxPage = RecordCount % PageSize; if (RecordCount % PageSize == 0 ) { MaxPage = RecordCount / PageSize; } else { MaxPage = RecordCount / PageSize + 1 ; } %> < body class = " UsePageBg " > < tablewidth = " 100% " border = " 0 " class = " InternalHeader " > < tr > < tdwidth = " 24% " >< fontsize = 4 > 分页显示记录 </ font ></ td > < tdwidth = " 76% " >< fontsize = 4 ><%= " 总共 " + RecordCount + " 条记录-当前页: " + PageNo + " / " + MaxPage %></ font ></ td > </ tr > </ table > < br > < tablewidth = " 100% " border = " 0 " class = " NormalTableTwo " > < tr > < td class = " InternalHeader " > 记录序号 </ td > < td class = " InternalHeader " > 数据标识号 </ td > < td class = " InternalHeader " > 产品名称 </ td > < td class = " InternalHeader " > 作者 </ td > < td class = " InternalHeader " > 提交时间 </ td > < td class = " InternalHeader " > 简介 </ td > </ tr > <% long i = 1 ; while (rs.next()) { long bil = i + (PageNo - 1 ) * PageSize; %> < tr > < td class = " NormalFieldTwo " ><%= bil %></ td > < td class = " NormalFieldTwo " ><%= rs.getString( 1 ) %></ td > < td class = " NormalFieldTwo " ><%= rs.getString( 2 ) %></ td > < td class = " NormalFieldTwo " ><%= rs.getString( 3 ) %></ td > < td class = " NormalFieldTwo " ><%= rs.getString( 4 ) %></ td > < td class = " NormalFieldTwo " ><%= rs.getString( 5 ) %></ td > </ tr > <% i ++ ; } %> </ table > < br > < tablewidth = " 100% " border = " 0 " class = " InternalHeader " > < tr > < td > < divalign = " center " > <% out.print( " <fontsize=4> " ); // 显示第一页或者前一页的链接 // 如果当前页不是第1页,则显示第一页和前一页的链接 if (PageNo != 1 ) { PrevStart = PageNo - 1 ; out.print( " <ahref=pagelistDemo.jsp?PageNo=1>第一页</a>: " ); out.print( " <ahref=pagelistDemo.jsp?PageNo= " + PrevStart + " >前一页</a> " ); } out.print( " [ " ); // 打印需要显示的页码 for ( int c = CounterStart;c <= CounterEnd;c ++ ) { if (c < MaxPage) { if (c == PageNo) { if (c % PageSize == 0 ) { out.print(c); } else { out.print(c + " , " ); } } else if (c % PageSize == 0 ) { out.print( " <ahref=pagelistDemo.jsp?PageNo= " + c + " > " + c + " </a> " ); } else { out.print( " <ahref=pagelistDemo.jsp?PageNo= " + c + " > " + c + " </a>, " ); } } else { if (PageNo == MaxPage) { out.print(c); break ; } else { out.print( " <ahref=pagelistDemo.jsp?PageNo= " + c + " > " + c + " </a> " ); break ; } } } out.print( " ] " ); ; if (PageNo < MaxPage) { // 如果当前页不是最后一页,则显示下一页链接 NextPage = PageNo + 1 ; out.print( " <ahref=pagelistDemo.jsp?PageNo= " + NextPage + " >下一页</a> " ); } // 同时如果当前页不是最后一页,要显示最后一页的链接 if (PageNo < MaxPage) { LastRec = RecordCount % PageSize; if (LastRec == 0 ) { LastStartRecord = RecordCount - PageSize; } else { LastStartRecord = RecordCount - LastRec; } out.print( " : " ); out.print( " <ahref=pagelistDemo.jsp?PageNo= " + MaxPage + " >最后一页</a> " ); } out.print( " </font> " ); %> </ div > </ td > </ tr > </ table > <% rs.close(); statement.close(); connection.close(); %> </ body > </ html >
用到的类文件:Globals.java
/** * */ package net.data.util; /** *//** * @author Administrator * */ public class Globals { public static String username="sa"; public static String pwd="sa"; public static String DbName="TestData"; //public static String Server="192.168.30.6"; public static String Server="192.168.44.2:1433"; public static String Port="1433"; public static String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver"; // public static String connectionURL { // // return "jdbc:sqlserver://"+Server+":"+Port+";databaseName="+DbName; // } } <!-- {cps..1}-->/***/ /** * */ package net.data.util; /***/ /** * @author Administrator * */ public class Globals { public static Stringusername = " sa " ; public static Stringpwd = " sa " ; public static StringDbName = " TestData " ; // publicstaticStringServer="192.168.30.6"; public static StringServer = " 192.168.44.2:1433 " ; public static StringPort = " 1433 " ; public static StringdriverName = " com.microsoft.sqlserver.jdbc.SQLServerDriver " ; // publicstaticStringconnectionURL{ // // return"jdbc:sqlserver: // "+Server+":"+Port+";databaseName="+DbName; // } }
效果如图:
相关资源:JSP+Servlet+MySQL或SQLServer实现增删改查,搜索,分页功能
