我做一个分页显示的代码,但是老出错,不知道为什么,又急用,还请高手帮忙看看好吧!
-------------------------------
首先是一个Pagebean:
package com.data;import com.db.DBConnection;
import java.util.Vector;public class PageBean {
public int curPage;  //当前页码
public int maxPage;  //最大页码
public int maxRowCount; //最大行数
public int rowsPerPage; //每页显示行数
public Vector data=null;  //本页要显示的资料

public PageBean()
{

}
public PageBean(DBConnection dbc,String SQLStr) throws Exception
{
this.maxRowCount=dbc.getListDataCount(SQLStr);  //得到总行数
this.data=dbc.getListData();
}
/**
 * 计算总页数
 */
public void countMaxPage()
{
if(this.maxRowCount%this.rowsPerPage==0)
{
this.maxPage=this.maxRowCount/this.rowsPerPage;
}
else
{
this.maxPage=this.maxRowCount/this.rowsPerPage+1;
}
}
public Vector getResult()
{
return this.data;
}
}
--------------------------------------------
再就是一个数据库链接的类,包括数据库的常规操作,查询、更新什么的:
public class DBConnection 
{
private Connection conn = null;
private ResultSet rst = null;
private Statement stmt = null;
private Vector vctr=null;

public DBConnection()
{
try
{
Context initCtx = new InitialContext();
Context envCtx = (Context)initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/qxauc");
this.conn = ds.getConnection(); 
this.stmt=conn.createStatement();
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
//getter、setter……………………
//分页用的代码:
 public PageBean listUserInfoBean(String page)
{
try
{
String ttlCntSQLStr="select count(*) from qx_users";
PageBean pgbn=new PageBean(this,ttlCntSQLStr);
int pageno=Integer.parseInt(page);
String SQLString="select top " + pageno*pgbn.rowsPerPage + 
" * from qx_users order by userId";
executeQuery(SQLString);
this.vctr=new Vector();
int i=0;
while(rstNext())
{
if(i>((pageno-1)*pgbn.rowsPerPage-1))
{
Object[] obj=new Object[16];
obj[0]=new Integer(rstGetInt("userId")); 
obj[1]=rstGetString("userName");
obj[2]=rstGetString("password");
obj[3]=new Integer(rstGetInt("userRole")); 
obj[4]=rstGetString("trueName"); 
obj[5]=rstGetString("idNum");   
obj[6]=rstGetString("telephone");  obj[7]=rstGetString("gender");   
obj[8]=rstGetString("email");   
obj[9]=rstGetString("cliUnit");  
obj[10]=rstGetString("post");   
obj[11]=rstGetString("postcode");   
obj[12]=rstGetString("address");  
obj[13]=rstGetString("pwdQues");   
obj[14]=rstGetString("pwdAnsw");   

obj[15]=new Integer(rstGetInt("activeFlg"));
this.vctr.add(obj);
}
i++;
}
pgbn.curPage=pageno;
pgbn.data=this.vctr;
return pgbn;
}
catch(Exception e)
{
System.out.println(e.toString());
return null;
}

}
public int getListDataCount(String SQLStr)
{
int ldc=0;
DBConnection dbc=new DBConnection();
dbc.executeQuery(SQLStr);
if(dbc.rstNext())
{
ldc=dbc.rstGetInt(1);
}
dbc.ConnClose();
return ldc;
}
public Vector getListData()
{
return this.vctr;
}
}
---------------------------------
下面是Servlet中的处理代码:
String userId=request.getParameter("userId");
response.setContentType("text/html;chaeset=gb2312");
response.setCharacterEncoding("gb2312");
if(userId!=null)
{
if(userId.equalsIgnoreCase("-1")) //浏览所有用户信息
{
try
{
String jmpage=request.getParameter("page");
if(jmpage==null)
{
jmpage="1";
}
DBConnection dbc=new DBConnection(); 
PageBean pb=dbc.listUserInfoBean(jmpage);
request.setAttribute("pagedata", pb);  //将pagebean写到session
dbc.ConnClose();
RequestDispatcher dis=request.getRequestDispatcher("/admin/viewuser.jsp?userId=-1&page=1");
dis.forward(request, response);

}
catch(Exception e)
{
System.out.println(e.toString());
PrintWriter pw=response.getWriter();
pw.println("<h1>产生异常!</h1>"+"<br />");
pw.println("<h4>e.toString():</h4>"+e.toString()+"<br />");
pw.println("<h4>e.getMessage():</h4>"+e.getMessage()+"<br />");
pw.println("<hr />");
e.printStackTrace(pw);
}
}
else //查看个人信息
{
PrintWriter pw=response.getWriter();
pw.println("<h1>你是要查看个人信息吧!</h1>");
}
}
else
{
PrintWriter pw=response.getWriter();
pw.println("<h1>请求的参数出错!</h1>");
}
-------------------------------
控制显示的jsp代码:
<div id="innerPage">
<a href="<c:url value="admin/main.jsp" />" target="mainFrame"><--返回首页</a>
<h1>您查询的数据:</h1>
<table>
<tbody>
<%
Vector v=pagedata.getResult();
   if(v!=null)
  { 
   Enumeration e=v.elements();
    
  while(e.hasMoreElements())
  {
   Object[] obj=(Object[])e.nextElement(); %>
   <tr>
   <td><%=obj[0] %></td>
   <td><%=obj[1] %></td>
   <td><%=obj[2] %></td>
   <td><%=obj[3] %></td>
   <td><%=obj[4] %></td>
   <td><%=obj[5] %></td>
   <td><%=obj[6] %></td>
   <td><%=obj[7] %></td>
   <td><%=obj[8] %></td>
   <td><%=obj[9] %></td>
   <td><%=obj[10] %></td>
   <td><%=obj[11] %></td>
   <td><%=obj[12] %></td>
   <td><%=obj[13] %></td>
   <td><%=obj[14] %></td>
   <td><%=obj[15] %></td>
</tr>
<%}
}
else
{%>
查询过程出现错误!<br/>
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp --from viewuser.jsp
<%
} %>
</tbody>
</table>
<%// 页面导航 %>
<%if(pagedata.maxPage!=1){%>
<div id="pageBar">
<form name="PageForm"  action="/servlet/yourpackage.yourservlet" method="post">
<%@ include file="pageBar.inc"%> 
</form>
</div>
<%}%>
</div>
------------------------------------
翻页控制代码:
<script language="JavaScript">
<!--
function jumping()
{
document.PageForm.submit();
return;
}
function gotoPage(pageno)
{
document.PageForm.jumpPage.value=pageno;
document.pageForm.submit();
return;
}
</script>
第<%=pagedata.curPage%>/<%=pagedata.maxPage%>页
<%if(pagedata.curPage==1){  out.print(" 首页 上一页");   }else{  %>   
<A HREF="javascript:gotoPage(1)">首页</A>
<A HREF="javascript:gotoPage(<%=pagedata.curPage-1%>)">上一页</A>
<%}%>
<%if(pagedata.curPage==pagedata.maxPage){ out.print("下一页 尾页");   }else{  %>   
<A HREF="javascript:gotoPage(<%=pagedata.curPage+1%>)">下一页</A>
<A HREF="javascript:gotoPage(<%=pagedata.maxPage%>)">尾页</A>
<%}%>
转到第<SELECT name="jumpPage" onchange="Jumping()">
     <% for(int i=1;i<=pagedata.maxPage;i++)  {
     if (i== pagedata.curPage){
     %>
     <OPTION selected value=<%=i%>><%=i%></OPTION>
     <%}else{%>
     <OPTION value=<%=i%>><%=i%></OPTION>
     <%}}%>   
     </SELECT>页

解决方案 »

  1.   

    String SQLString="select top " + pageno*pgbn.rowsPerPage +
    " * from qx_users order by userId";
    你的是access吧,,上面的语句能取出第几页所需要的数据吗?
    我想是不行的,access没有搞过,不过肯定上面是错的。。
      

  2.   

    回 tcmis(难道你忘了吗?) :
    下面的代码可以控制取特定页的数据的。
      

  3.   

    我也想贴错误啊,可就是提不出数据而已啊!
    在显示时,我也用了Vector v=pagedata.getResult();  if(v!=null){}作判断,结果是v不为null啊。请高手多多指点!
      

  4.   

    晕,提不出数据不会把sql打出来执行一下看看什么原因啊