50分求一个jsp从数据库读出文件分页的程序??

hexinyu3 2004-09-28 11:54:15
50分求一个jsp从数据库读出文件分页的程序??
...全文
98 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
aoplo 2004-09-28
<%@ page import="java.util.Vector"%>
<html>
<head>
<title>分页显示</title>
</head>
<body>
<%
Vector vector = (Vector)session.getAttribute("vector");
int pageSize = 3; //每页显示的记录数
int totalNum = vector.size(); //总共要显示的记录数
int totalPageNum = totalNum / pageSize + 1; //不能整除的话就还要一页显示余下的记录
if (totalNum % pageSize == 0) totalPageNum = totalPageNum -1; //如果记录总数可以整除每页显示的记录数则减少一页
String sPageNum = (String)request.getParameter("sPageNum");
int iPageNum; //当前页数
int iLeavePage; //剩下页数
int currentCount; //当前要显示的记录数
if (sPageNum == null)
{
iPageNum = 1;
iLeavePage = totalPageNum - iPageNum;
}
else
{
iPageNum = new Integer(sPageNum).intValue();
iLeavePage = totalPageNum - iPageNum;
}
if ((iPageNum == totalPageNum)&&(totalNum % pageSize != 0))
currentCount = totalNum % pageSize;
else currentCount = pageSize;
%>
<%
if (iPageNum >1)
{
%>
<a href="display.jsp?sPageNum=<%= new Integer(iPageNum - 1).toString()%>">上一页</a>
<%
}
if (iPageNum < totalPageNum)
{
%>
<a href="display.jsp?sPageNum=<%= new Integer(iPageNum + 1).toString()%>">下一页</a>
<%
}
%>
<table>
<tr>
<td>属性</td>
<td>名字</td>
<td>密码</td>
</tr>
<%
for (int i=(iPageNum-1)*pageSize;i<(iPageNum-1)*pageSize+currentCount;i++)
{
String[] str = (String[])vector.get(i);
%>
<tr>
<td><%out.println(str[0]);%></td>
<td><%out.println(str[1]);%></td>
<td><%out.println(str[2]);%></td>
</tr>
<%
}
%>
</table>
</body>
</html>
回复
hbuzhang 2004-09-28
上面是我用的,里面的数据可能和你的不一样,你可以根据情况适当的改进
回复
hbuzhang 2004-09-28
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page language="java" import="java.sql.*"%>
<%@ page import="java.lang.Math.*" %>
<jsp:useBean id="userBean" scope="page" class="我的bean"/>
int t;
int mtotal;
t=0;
String strSQLsize="SELECT * FROM 数据表";
ResultSet RSsize = userBean.executeQuery(strSQLsize);
while(RSsize.next()){
t=t+1;
}
if((t%5)>0){
mtotal=t/5+1;
}else mtotal=t/5;
%>



<%!String pageNo, mTmp;
int i, j, k;
%>
<%
pageNo = request.getParameter("pageNo");

if(pageNo == null){
pageNo = "1";
}
j = Integer.parseInt(pageNo);

if(j < 1)
j = 1;
if(j > mtotal)
j = mtotal;

%>



<%
String strSQL="SELECT * FROM 数据表";
ResultSet RSa = userBean.executeQuery(strSQL);
for(k = 0;k < (j-1)*5;k++)
{

RSa.next();
}

i = 0;
k = 1;
out.print("<table border='1' bgcolor='#99CCFF'><tr><td width='296'>文章主题</td><td width='136'>作者</td></tr></table>");
while (RSa.next()) {
//out.println("ok"+i+"ok");
i = i + 1;
//超过3条
if(i == 6)
{
k = 0;
break;
}
String id=RSa.getString(1);

out.print("<table border='1'><tr><td width='296'><a href='test1.jsp?zhuti="+RSa.getString(1)+"'>"+RSa.getString(1)+"</td><td width='136'>"+RSa.getString(2)+"</td></tr></table>");
}
i = i - k;

RSa.close();

%>
<%////////////////////////////////////////////////
if(j > 1)
{
%><table>
<tr>
<td width='256'></td>
<td>
<a href="con1.jsp?pageNo=1">第一页</a>
<%
int ii = Integer.parseInt(pageNo,10);
// out.println(ii);
if(ii > 1)
ii = ii -1;
String ssTmp = Integer.toString(ii);
%>
<a href="con1.jsp?pageNo=<%=ssTmp%>">上一页</a>
<%
}
if(j < mtotal)
{
int ii = Integer.parseInt(pageNo,10);
if(ii < mtotal)
ii = ii + 1;
String ssTmp = Integer.toString(ii);
%>
<a href="con1.jsp?pageNo=<%=ssTmp%>">下一页</a>
<a href="con1.jsp?pageNo=<%=mtotal%>">最后页</a>
<%
}
if(mtotal < j)
j = mtotal;
%></td>
</tr>
</table>
回复
hj821003 2004-09-28
eg:
select top n * from t while id not in (select top m id from t order by id) order by id

n是每页显示记录数,m是当前页前面的记录数,每次用not in把前面的记录排除,在剩下的记录中显示前面的记录从而实现分页。
回复
drugon 2004-09-28
算法比较简单,但是你有没有考虑过各种分页算法的效率问题呢?一般的处理不外乎是先读出所有的记录,然后得到当前是多少页,根据每页要显示的行数,用数据库的relative(int rows)方法来绝对定位到一条记录下面,然后while循环每页要显示的行数的次数,就是这样的。

这样的算法比较简单,但是效率不高,特别是在有大量数据的前提下,一次不可以把所有的数据都读出来。
回复
globaldf01 2004-09-28
1.定义一个分页数全局常量,即每页显示的数据条数。


  private final static int SKIP = 100;



  2.定义一个确定某个分页条数的全局变量,即该显示页的当前显示数据条数。


  private static int cur = 0;




  3.定义一个ResultSet全局变量,以便多次使用


  private static java.sql.Result rs = null;




  4.打开一个数据库连接[/pre]


  Class.forName( sqlDriver );
  java.sql.Connection conn = DriverManager.getConnection( URL, (String)userName,(String)Passwd)
  Statement stmt = conn.createStatement();
  String searchSql = "......";
  rs = stmt.executeQuery(searchSql);


5.获取查询结果集数据(一般是在查询按钮的响应事件函数里)


  ......
  nextButton.setEnable(true);
  cur = 0;
  while( cur < SKIP && rs.next() ){
  cur ++ ;
  .....(获取rs中的记录,存入java程序的变量中)
  }




  6.显示下一页的结果集数据(一般是在下页按钮的响应事件函数里)


  if( rs.getRow() == 0 )
  {
  nextButton.setEnable(false);
  closeConnection(); --rs的cursor已经到了最后,结果集显示完毕,关闭此次的连接
  }
  cur = 0;
  if(rs != null && rs.getRow() > 0)
  {
  ....将上页显示的内容清除
  while(cur < SKIP && rs.next() )
  {
  cur ++ ;
  .....(获取结果集中的记录,存入java程序的变量中)
  }
  }




  缺陷:

  此方法根据2.0版本的JDBC(具体和JDBC驱动程序的提供商有关)之前的ResultSet类产生,因为ResultSet无法将已经显示的结果集回滚,所以此法只能按照ResultSet类的定义,从左往右、从前往后的浏览数据结果。无法动态显示指定任意前后的结果集数据。



回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告