一句话:基本功
值得注意的地方
①
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" onblur="goPages();"/>页 </div> <% //关闭结果集 rs.close(); stmt.close(); conn.close(); %> </form> </body> </html>
一个很好的参考例子
http://jihao.iteye.com/blog/253280
servlet+jsp+jstl
======================================华丽的分割线====================================
【难点分析--总页数 算法】
主要是要考虑: 记录总数 除 一页显示的记录数 之后剩下的余数这部分,实际上这部分一般来说我们也算一页,所以要加上intPageSize,
然而当正好总数和一页的记录数整除的时候就会对出一页来,所以我们要-1.不知道你明白没有