Mysql和Oracle数据库中的分页查询

方法一:mysql数据库分页
<%
      //定义每一页显示的记录
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 除页面的大小pageSiz e, 取商
    
        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.jsp?pageNo=<%=pageNo-1 %>"> 上一页 </a>&nbsp;
<a href="ShowArticleFlat.jsp?pageNo=<%=pageNo+1 %>"> 下一页 </a>

方式二:可以选择的显示:可以实现页面的跳转


<form name="form1">
<select name="pageNo"  οnchange="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>


方法二:Oracle数据库下的分页操作


<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>



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值