Mysql和Oracle中的分页查询
 
方法一:my分页
<%
    //定义每一页显示的记录
int pageSize = 3;
String strPageNo = request.getParameter("pageNo");
        //记录当前页面
int pageNo;
        //如果传入的当前页码为空,停留在第一页
if(strPageNo == null || strPageNo.equals(""))
{
pageNo = 1;
}
else
{
 try
                //把传进来的字符串转化成数字
{
pageNo = Integer.parseInt(strPageNo.trim());
}
 
catch(NumberFormatException e)
 
{
 
pageNo = 1;
 
}
                    //如果页码小于或者等于0停留在第一页
if(pageNo<=0)
{
pageNo=1;
}
}
 
//连接数据库
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection
("jdbc:mysql://localhost/bbs?user=root&password=mingming");
Statement stCount = conn.createStatement();
ResultSet rsCount = stCount.executeQuery
("select count(*) from article where pid=0");//查询共有多少个根节点
rsCount.next();
int totalRecord = rsCount.getInt(1); //拿到所有的子节点,计算出总共有多少条记录
 
//   第一种方法        计算得到总的页数,如果能被整数,页数就是商,否则就是商+1
int totalPage = 
totalRecord%pageSize==0 ? totalRecord/pageSize : totalRecord/pageSize +1;
        //第二种方法    计算得到总的页数,在 总记录上+加一个pageSize然后减去1除页面的大小pageSize,取商
    
        int totalRecords = rsCount.getInt(1);
 
        totalPages = (totalRecords + PAGE_SIZE - 1)/PAGE_SIZE;
 
 
 
        //如果当前页码大于总的页数,停在最后一页
if(pageNo>totalPage)
{
pageNo = totalPage;
}
//计算每一次分页时 的起始位置,注意起始是从0开始;
int startPos = (pageNo-1)*pageSize;
Statement st = conn.createStatement();
        //进行分页查询,startPos是每一次分页的起始位置;   pageSize是这一页要显示记录的大小
ResultSet rs = st.executeQuery
("select * from article where pid =0 order by pdate desc limit "+startPos+","+pageSize);
%>   
 
分页后在页面的不同的显示方式:
 
方式一:在一个table中正常的显示:
 
<table border="1">
<%
while(rs.next()){
%>
<tr>
<td>
<%= rs.getString("title") %>//只显示每一个记录的title
</td>
</tr>
<%
}
                //关闭流
rs.close();
st.close();
conn.close();
%>
</table>
首页<%=1 %>&nbsp;共<%=totalPage %>页 &nbsp;第<%=pageNo %>页&nbsp;末页<%=totalPage %>
<a href="ShowArticleFlat.?pageNo=<%=pageNo-1 %>"> 上一页 </a>&nbsp;
<a href="ShowArticleFlat.jsp?pageNo=<%=pageNo+1 %>"> 下一页 </a>
 
方式二:可以选择的显示:可以实现页面的跳转
 
 
<form name="form1">
<select name="pageNo" onchange="document.form1.submit()">
<%
for(int i = 1;i<=totalPage;i++){
%>
<option value=<%=i %> <%= pageNo==i?"selected":""%>>第<%=i %>页
<%
}
%>
</select>
</form>
方式三:可以直接进行页面的查找:
 
//提交到当前页面
<form name="fom2" action="ShowArticleFlat.jsp">
<input type=text size=4 name="pageNo" value=<%=pageNo%> />
<input type="submit" value="go" />
</form> 
 
 
方法二:数据库下的分页操作
 
 
<body>
<h2>分页查询</h2>
<table>
<tr>
<td>姓名</td>
<td>薪水</td>
</tr>
<%
//连接数据库,加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection ct = DriverManager.getConnection
("jdbc:oracle:thin:@127.0.0.1:1521:ORCL","scott","tiger");
Statement sm = ct.createStatement();
//总共有多少页
int pageCount = 0;
//总共有多少行记录
int rowCount = 0;
//每页有3行记录
int pageSize = 3;
//接收pageNow
String s_pageNow = (String)request.getParameter("pageNow");
//当前在第一页
int pageNow = 1;
if(s_pageNow != null)
{
//把s_pageNow转化为数值型
pageNow = Integer.parseInt(s_pageNow);
}
//查询表中共有多少条记录
ResultSet rs = sm.executeQuery("select count(*) from emp");
if(rs.next())
{
rowCount = rs.getInt(1);
//如果整除就是商,否则就是商加上1  可以用三元表达式代替  rowCount%pageSize==0 ?  rowCount/pageSize : rowCount/pageSize +1
if(rowCount%pageSize == 0)
{
pageCount = rowCount/pageSize;
}
else
{
pageCount = rowCount/pageSize +1;
}
}
//执行分页查询
rs = sm.executeQuery
("select * from (select a1.*,rownum rn from(select * from emp) a1 where rownum<="+pageNow*pageSize+")where rn>="+((pageNow-1)*pageSize+1)+" ");
while(rs.next())
{
out.println("<tr>");
out.println("<td>"+rs.getString(2)+"</td>");
out.println("<td>"+rs.getString(6)+"</td>");
out.println("</tr>");
}
//输出每一页要查找的连接
for(int i=1; i<=pageCount; i++)
{
out.print("<a href=fenye.jsp?pageNow="+i+">["+i+"]<a>");
}
%>
</table>
</body>