请高手看看是不是我的bean有什么问题,我看了好久,觉得应该没有问题,但是不知道为什么从数据库里取得记录总是不对,Vector item 取出来的记录对,但是不知道为什么到从item再存到Vector queryResult时就不对了,queryResult得数组每插一个item同时又把前面已经插进去的内容覆盖了,最后提出来的内容是:显示了10遍第10条的记录。bean的内容
----------------------------------------------------------------------------------
/*
 * 创建日期 2006-5-14
 *
 * 更改所生成文件模板为
 * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
 */
package job;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.Vector;/**
 * @author dy
 *
 * 更改所生成类型注释的模板为
 * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
 */
public class Cpage {
private Connection con;
private int maxPage;
private Vector queryResult=new Vector();
private Vector item=new Vector();
private Vector colName=new Vector();
public Cpage()
{
con=DBConnection.getConnection();
}
public int getMaxPage()
{
return this.maxPage;
}
public Vector getQueryResult()
{
return this.queryResult;
}
public Vector getColName()
{
return this.colName;
}
public String getCol(ResultSet rst,int type,int colNum) throws Exception
{
String ret="";
switch(type)
{
case 1: ret=rst.getString(colNum);break;
case 2: ret=String.valueOf(rst.getDouble(colNum));break;
case 3: ret=String.valueOf(rst.getDouble(colNum));break;
case 4: ret=String.valueOf(rst.getInt(colNum));break;
case 5: ret=String.valueOf(rst.getInt(colNum));break;
case 6: ret=String.valueOf(rst.getFloat(colNum));break;
case 8: ret=String.valueOf(rst.getDouble(colNum));break;
case 12: ret=rst.getString(colNum);break;
case 91: ret=rst.getDate(colNum).toString();
}
return ret;
}
public void createResult(int curPage) throws Exception
{
con=DBConnection.getConnection();
Statement stmt=con.createStatement();
ResultSet rst=stmt.executeQuery("select count(*) from users");
int rows=0;
while(rst.next())
{
rows=rst.getInt(1);
}
rst.close();
stmt.close();
stmt=con.createStatement();
rst=stmt.executeQuery("select * from users");
ResultSetMetaData meta=rst.getMetaData();
int col=meta.getColumnCount();
int i;
colName.clear();
for(i=1;i<=col;i++)
{
colName.addElement(meta.getColumnName(i));
}
if(rows==0) 
{
rst.close();
stmt.close();
con.close();
this.maxPage=0;
return;
}
if(rows % 10 !=0) this.maxPage=rows/10+1;
else this.maxPage=rows/10;
rst.close();
stmt.close();
if(this.maxPage==1)
{
stmt=con.createStatement();
rst=stmt.executeQuery("select * from users");
meta=rst.getMetaData();
col=meta.getColumnCount();
queryResult.clear();
while(rst.next())
{
item.clear();
for(i=1;i<=col;i++)
{
item.addElement(getCol(rst,meta.getColumnType(i),i));
}
queryResult.addElement(item);
}
}
else
{
stmt=con.createStatement();
rst=stmt.executeQuery("select top "+curPage*10+" * from users");
meta=rst.getMetaData();
col=meta.getColumnCount();
queryResult.clear();
int j=0;
while(rst.next())
{
j++;
if(j>(curPage-1)*10)
{
item.clear();
for(i=1;i<=col;i++)
{
item.addElement(getCol(rst,meta.getColumnType(i),i));
}
queryResult.addElement(item);
}
}
}
rst.close();
stmt.close();
con.close();
}}
-----------------------------------------------------------------------------------jsp页面内容
-----------------------------------------------------------------------------------
<%@ page language="java" contentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*,job.*"%>
<jsp:useBean id="userquery" class="job.Cpage" scope="session"/>
<jsp:useBean id="dbconnection" class="job.DBConnection" scope="page"/>
 <%request.setCharacterEncoding("gb2312");%>
<script language="JavaScript">
<!--
   function Jumping()
    {
       document.PageForm.submit();
       return;
    }
   function gotoPage(pagenum)
    {
       document.PageForm.jumpPage.value=pagenum;
       document.PageForm.submit();
       return;
    }
-->
</script> 
<html>
<body>
<table border=0 cellspacing=0 cellpadding=0 align=center>
<tr >
<td valign=top>
<td>&nbsp;&nbsp;&nbsp;&nbsp;</td>
<%      
    String curPage=(String)request.getParameter("jumpPage");
    int iCurPage;
    if(curPage==null) 
     {
        iCurPage=1;
        userquery.createResult(iCurPage);
     }
    else
     {
        iCurPage=Integer.parseInt(curPage);
        String sMaxPage=(String)session.getAttribute("maxPage");
        int iMaxPage=Integer.parseInt(sMaxPage);
        if(iCurPage>iMaxPage) iCurPage=iMaxPage;
        userquery.createResult(iCurPage);
     }  
       Vector vt=userquery.getColName();%>
     <tr>
<%
       for(int j=0;j<vt.size();j++)
       {
%>
         <td align=center bgcolor=#3DAC33><font size=2><%=(String)vt.elementAt(j)%></font></td>
<%
       }
%>
     </tr>
<%
       int maxPage=userquery.getMaxPage();
       if(maxPage!=0)
       {
          session.setAttribute("maxPage",String.valueOf(maxPage));
          Vector vr=userquery.getQueryResult();
          Enumeration er=vr.elements();
                    
          while(er.hasMoreElements())
          {
            Vector recitem=(Vector)er.nextElement();
            
           // out.println(vr);
         %><tr>
         <%
             for(int n=0;n<recitem.size();n++)
            {
%> 
             <td bgcolor=#3DAC33 align=center><b><font size=3 color=#ffffff><%=(String)recitem.elementAt(n)%></font></b></td>                    
<%
            }
            %>
            </tr>
            <%
           }%>
     </table>
     </p>
<%
         if(maxPage!=1)
         {
%>
           <p>
           <form name="PageForm" action="page.jsp" method="post" >  
           <table align=center> 
             <%if(iCurPage==1)
                {
             %>
                <font size=2>首页&nbsp;&nbsp;上一页&nbsp;&nbsp;</font>
             <%
                }
               else
                {
             %>
                <font size=2>
                <a href="javascript:gotoPage(1)">首页</a>&nbsp;&nbsp;
                <a href="javascript:gotoPage(<%=iCurPage-1%>)">上一页</a>&nbsp;&nbsp;
                </font>
             <%
                }
               if(iCurPage==maxPage)
                {
             %>
                <font size=2>下一页&nbsp;&nbsp;尾页&nbsp;&nbsp;</font>
             <%
                }
                else
                {
             %>
                <font size=2>
                <a href="javascript:gotoPage(<%=iCurPage+1%>)">下一页</a>&nbsp;&nbsp;
                <a href="javascript:gotoPage(<%=maxPage%>)">尾页</a>&nbsp;&nbsp;
                </font>
             <%
                }
             %>
             <font size=2>
             转到第<select name="jumpPage" onchange="Jumping()">
             <%
                for(int k=1;k<=maxPage;k++)
                {
                   if(k==iCurPage)
                   {
             %>
                   <option selected value=<%=k%>><%=k%></option>
             <%
                   }
                   else
                   {
             %>
                   <option value=<%=k%>><%=k%></option>
             <%
                   }
                 }
             %>
             </select>页
             </font>
             </table>
           </form>
           </p>
<%
          }
%>      
     
<%
  
      if(maxPage==0)
      {
%>
      </table>
      </p>
<%
      }
 }
%>
</td></tr>
</body>
</html>

解决方案 »

  1.   

    <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>//这里简单调用Bean达到从数据库得到数据的目的
    <jsp:useBean id="conDB" scope="session" class="db.dataConn" />
    <%
    int i;
      String strSQL="select * from table";
      ResultSet rs=conDB.exeQuery(strSQL);
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    </head><body>
    <%
    //开始纪录页数,如果pg是null那么设置为第一页
    String pg=request.getParameter("pg");
    if(pg==null)
    pg="1";
    int tt;//记录总数
    rs.last();
    //得到纪录条数
    tt=rs.getRow();
    //指回接过级首位
    rs.first();
    int pagex;
    //这里的 tt%10 为每页显示纪录的条数,可以自己定义
    if(tt%10==0)
    //这里计算共多少页,有于数,那么页数+1
    {pagex=(tt/10);}
    else
    {pagex=(tt/10)+1;}//计算总页数
    int pagey;//从用户那里得到的目标页
    pagey=Integer.parseInt(pg);
    如果页数小于1,那么把页数设置成1
    if(pagey<1)
    {
    pagey=1;
    }
    //如果页数大于总页数,那么设置成最大页数
    if(pagey>pagex)
    {
    pagey=pagex;
    }
    //翻页开始,调整记录指针的位置
    int n=(pagey-1)*10+1;
    int a;
    for(a=0;a<n-1;a++)
    {
    if(!rs.isLast())
          rs.next();
    }
    //翻页结束
    %>
    <table width="80%"  border="1" align="center">
      <tr align="center">
        <td width="33%">id</td>
        <td width="33%">name</td>
        <td width="33%">age</td>
      </tr>
      <!-- 循环输出开始 -->
      <tr align="center">
     <%  for(i=0;i<10;i++)
      { if(!rs.isAfterLast()){
      %>
      <tr>
        <td width="33%" nowrap><div align="center"><%=rs.getString("id")%></div></td>
        <td width="33%" nowrap><div align="center"><%=rs.getString("name")%></div></td>
        <td width="33%" nowrap><div align="center"><%=rs.getString("age")%></div></td>  </tr>
      <%rs.next();
      }
      }
      %>
      <!-- 循环输出结束 -->
      </tr>
    </table>
    <form name="form1" method="post" action="page.jsp">
      <div align="center"><a href="page.jsp?pg=1">首页</a>|
        <%
      if ((pagey-1)>=1){
      %>
        <a href="page.jsp?pg=<%=(pagey-1)%>">上一页</a>
        <%}
      else{out.print("上一页");}
      %>
      | 
      <%
      if ((pagey+1)<=pagex){
      %>
      <a href="page.jsp?pg=<%=(pagey+1)%>">下一页</a>
      <%}
      else{out.print("下一页");}
      %>
      | <a href="page.jsp?pg=<%=pagex%>">尾页</a>&nbsp;每页10条&nbsp;共 <%=pagex%> 页
      <!-- 下拉菜单开始 -->
        <select name="pg" id="pg">
    <%
    int pg1=0;
    for(pg1=1;pg1<=pagex;pg1++){
    %>
          <option value="<%=pg1%>" <%
    if(pagey==pg1)
    {out.print("selected");}
    %>><%=pg1%></option>
      <%}%>
        </select> <!-- 下拉菜单结束 -->
      页
      <input type="submit" name="Submit" value="go">
    </div>
    </form>
    <p>&nbsp;</p>
    </body>
    </html>
    <%
    rs.close();%>都有说明,自己参考..