一句话:基本功
值得注意的地方
①
conn.createStatemen RS类型设置
---ResultSet.TYPE_SCROLL_INSENSITIVE 或 //该常量指示可滚动但通常不受其他的更改影响的rs类型
---ResultSet.TYPE_SCROLL_SENSITIVE 之一//常量指示可滚动并且通常受其他的更改影响的rs类型。
---ResultSet.CONCUR_READ_ONLY 或 //只读
---ResultSet.CONCUR_UPDATABLE 之一 //可以修改
设置
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
//创建一个可以滚动的只读的SQL语句对象
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
②
总页数的算法
//总页数
pageCount = (rowCount + pageSize -1) / pageSize;
显示页第一条记录的算法
//将记录指针定位到待显示页的第一条记录上
rs.absolute((pages -1)*pageSize+1);
③
理解上一页 下一页 到X页的原理
<%@page contentType="text/html; charset=utf-8" %>
<%@page import="java.sql.Connection, java.sql.Statement, java.sql.ResultSet
,java.sql.DriverManager" %>
<%
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String user = "scott";
String passwd = "tiger";
String sql = "Select id,name,salary From employee";
int pageSize =0; //一页显示的记录数
int rowCount =0; //记录总数
int pageCount =0; //总页数
int pages =0; //待显示页码
pageSize = 1; //设置一页显示的记录数
String strPage = "";
strPage = request.getParameter("page");
//参数为空,显示第一页
if(null == strPage || "".equals(strPage)){
strPage = "1";
}else{
pages = Integer.parseInt(strPage);
}
if(pages <1) pages =1;
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, user, passwd);
//创建一个可以滚动的只读的SQL语句对象
<span style="white-space:pre"> </span>stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql);
//获得总记录数
rs.last();
rowCount = rs.getRow();
//总页数
pageCount = (rowCount + pageSize -1) / pageSize;
//调整待显示的页码
if(pages > pageCount)
pages = pageCount;
}catch(Exception e){
e.printStackTrace();
}
%>
<html>
<head>
<title>page demo</title>
<style type="text/css">
body{text-align:center}
#content{width:980px;martin:0 auto;}
#foot{width:980px;martin:0 auto;}
</style>
<script type="text/javascript">
function goPages(){
var page = document.getElementById("pageNo").value;
form1.action = "demo.jsp?page=" + page;
form1.submit();
}
</script>
</head>
<body>
<form name="form1" method="post" action="">
<div id="content" style="text-align:center">
<h1>Demo</h1>
<table border="1" cellspacing="0" cellpadding="0" width="980px">
<tr>
<td>ID</td>
<td>Name</td>
<td>Salary</td>
</tr>
<tr>
<%
if(pageCount >0 ){
//将记录指针定位到待显示页的第一条记录上
rs.absolute((pages -1)*pageSize+1);
//显示数据
int i = 0;
while(i<pageSize && !rs.isAfterLast()){
%>
<tr>
<td><%=rs.getString(1)%></td>
<td><%=rs.getString(2)%></td>
<td><%=rs.getString(3)%></td>
</tr>
<%
rs.next();
i++;
}
}
%>
</tr>
</table>
</div>
<div id="foot">
第<%=pages%>页 共<%=pageCount%>页 <br>
<a href="demo.jsp?page=1">首页</a>
<%if(pages >1) {%><a href="demo.jsp?page=<%=pages-1%>">上一页</a><%}%>
<%if(pages <pageCount){%><a href="demo.jsp?page=<%=pages+1%>">下一页</a><%}%>
<a href="demo.jsp?page=<%=pageCount%>">尾页</a>
到<input type="text" id="pageNo" style="width:30px" οnblur="goPages();"/>页
</div>
<%
//关闭结果集
rs.close();
stmt.close();
conn.close();
%>
</form>
</body>
</html>
一个很好的参考例子
http://jihao.iteye.com/blog/253280
servlet+jsp+jstl
======================================华丽的分割线====================================
【难点分析--总页数 算法】
主要是要考虑: 记录总数 除 一页显示的记录数 之后剩下的余数这部分,实际上这部分一般来说我们也算一页,所以要加上intPageSize,
然而当正好总数和一页的记录数整除的时候就会对出一页来,所以我们要-1.不知道你明白没有
=======================================================================================================
【要点】
变量
rowCount 记录总数
pages 当前页
pageCount 总页数
pageSize 每页记录数
1
stmt = conn.createStatement(可滚动, 可更新)
2
pageCoount = rowCount + pageSize -1 /pageSize;
3
第一条
rs.absolute((pages -1)*pageSize +1)
4
当前页
pages
上一页
demo.jsp?page=pages-1
下一页
demo.jsp?page=pages+1
尾页
demo.jsp?page=pageCount