<%@page contentType="text/html;charset=gb2312"%>
<%@page import="java.sql.*"%>
<%@page import="javax.sql.*"%>
<%@page import="javax.naming.*"%>
<html>
<head>
<title>
分页程序
</title>
</head>
<body>
<%
Connection con = null;
PreparedStatement prep = null;
ResultSet rs = null;
String sql="select userName, userPassword from login";
//查找命名空间
Context ctxt = new InitialContext();
//查找DataSource
DataSource ds = (DataSource)ctxt.lookup("java:comp/env/jdbc/xxx");
con = ds.getConnection();
try
{
prep = con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs = prep.executeQuery();
/*注意结果集为空时*/
rs.last();
}
catch(Exception e)
{
out.println("ERROR");
}
%>
<%
//待显示页码
int intPage = 0;
//每页显示的记录条数
int intPageSize = 2;
//总记录条数
int intRowCount = rs.getRow();
//总的页面数
int intPageCount = (intRowCount + intPageSize -1)/intPageSize;
int i = 1;
/*先转换为String类型,若直接转换为int类型,那么由于第一次为空则会产生异常*/
String strPage = request.getParameter("tt");
if(strPage==null)
{
intPage=1;
}
else
{
intPage=Integer.parseInt(strPage);
if(intPage<1) intPage = 1;
}
/*这里的判断是为了在显示最后的一页记录后,点击下一页时链接到指定的页面*/
if(intPage>intPageCount) intPage = 1;
%>
<table border="1">
<%
rs.absolute((intPage-1)*intPageSize+1);
while(i<=intPageSize&&!rs.isLast())
{
%>
<tr><td><%=rs.getString(1)%></td><td><%=rs.getString(2)%></td>
<%
i++;
rs.next();
/*游标在倒数第二条时,执行了next后游标跳转到最后一条,会退出循环,导致最后一条记录无法显示,
因此需进行判断处理
*/
if(rs.isLast())
{
%>
<tr><td><%=rs.getString(1)%></td><td><%=rs.getString(2)%></td>
<%
}
}
/*若前面发生异常,则con可能无法放回到池中,多次刷新页面会则导致池中链接用完,资源耗尽*/
try
{
rs.close();
prep.close();
con.close();
}
catch(Exception ex)
{
out.println(ex);
}
%>
</table>
<!--此处可加判断,若为第一页时不显示“上一页”-->
<a href="page.jsp?tt=<%=intPage-1%>">上一页</a>
<a href="page.jsp?tt=<%=intPage+1%>">下一页</a>
</body>
</html>