分页是每个JAVA EE程序员所必须掌握的, 之前也曾写过两篇关于分页的博文。 一种是将所有记录查询出来存进Session中, 一种则是利用数据库本身的特征来分页。 一直以来都想构造一种非常通用的分页方法, 今天新鲜出炉了, 不过只是考虑到其通用性而没有顾及其效率、性能等了。
核心代码:
<body>
<%
int recordCount; //记录总数
int perpageSize=5; //每页显示记录数
int pageCount; //需显示总页数
int intPage; //待显示页码
int i=0;
int currPageBegin;
String url="jdbc:oracle:thin:@localhost:1521:oracle";
String userName="scott";
String userPwd="tiger";
Connection conn=null;
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, userName, userPwd);
Statement stmt = stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
String sqlcmd=request.getParameter("sqlcmd");
String strpage=request.getParameter("strpage");
System.out.println("sqlcmd: "+sqlcmd+",pageNum:"+strpage);
%>
<%
//对传入的页码数进行判断处理
if(strpage==null){
intPage = 1;
}else{
intPage = Integer.parseInt(strpage);
if(intPage<1) intPage=1;
}
%>
<%
ResultSet rs=null;
//动态执行分页查询SQL
rs = stmt.executeQuery(sqlcmd);
//指针记录移动到最后一条记录
rs.last();
//得到数据集中总记录数
recordCount = rs.getRow();
//得到总页数
pageCount = (recordCount+perpageSize-1)/perpageSize;
//重新设置待显示页码
if(intPage>pageCount) intPage = pageCount;
//得到字段描述信息
ResultSetMetaData metaData = rs.getMetaData();
StringBuffer hdata = new StringBuffer();
int colCount = metaData.getColumnCount();//得到总的字段数
hdata.append("<tr bgcolor=#ffccff>");
//输出表格列名
for(i=1;i<=colCount;i++){
hdata.append("<td align=center>"+metaData.getColumnName(i)+"</td>");
}
hdata.append("</tr>");
//定位记录指针到(intpage-1)*perPageSize行
rs.absolute((intPage-1)*perpageSize+1);
int j=0;
%>
<%
//从结果集中取得perpageSize条记录,作为当前页数据输出
while((j<perpageSize) && (!rs.isAfterLast())){
hdata.append("<tr bgcolor=#f0ffff>");
for(int k=1;k<=colCount;k++){
hdata.append("<td align=center><font size=2>"+rs.getString(k)+"</font></td>");
}
hdata.append("</tr>");
rs.next();
j++;
}
%>
<table align="center" border="1" cellspacing="0" width="85%">
<%=hdata.toString() %>
</table>
<center><br><br>
共<%=pageCount %>页 第<%=intPage %>页
<%
if(intPage>1)
{
%>
<a href="pagesplit.jsp?strpage=<%=intPage-1 %>&&sqlcmd=<%=sqlcmd %>">上一页</a>
<%} else{ %>
上一页<%} %>
<% if(intPage<pageCount)
{%>
<a href="pagesplit.jsp?strpage=<%=intPage+1 %>&&sqlcmd=<%=sqlcmd %>">下一页</a>
<%}else{ %>
下一页<%} %>
</center>
<%
rs.close();
stmt.close();
conn.close();
%>
<center><a href="select_table.jsp">继续输入分页SQL</a></center>
</body>
不用说, 上述代码的可读性很差, 之前也学过一点点关于自定义标签的使用。 我正酝酿着将其做成一个分页标签