String sdocdate,sbankno,sbatchno,sitemno,sserialsno,sproof,samount,svchnum,ssubset,sacsynum,spicpt,sImageAddress,sImageAddressDir,sImageAddressFile;
String items_input_docdatebegin,items_input_docdateend;    //这是从页面接收的查询条件
String items_input_moneybegin,items_input_moneyend,items_input_subset,items_input_accountno;   //这是从页面接收的查询条件String sql;
boolean loginAttempt = false;
int iacsyno;
int rowcnt = 0;
int rowno = 0;int intPageSize;    //一页显示的记录数  
int intRowCount;    //记录总数  
int intPageCount;   //总页数  
int intPage;        //待显示页码  
String strPage;     //请求的页码 
int i;              //循环控制参数 
ResultSet rs;       //返回数据集 boolean firstCondition=true;loginAttempt = true; strPage = request.getParameter("page");  //取得请求显示的页码
if (loginAttempt)
{
//取得页面上的查询条件
   items_input_docdatebegin= (String)request.getParameter("textfield2")+(String)request.getParameter("textfield3")+(String)request.getParameter("textfield4");
   items_input_docdateend=(String)request.getParameter("textfield22")+(String)request.getParameter("textfield32")+(String)request.getParameter("textfield42");
   items_input_moneybegin = (String)request.getParameter("textmoney1");
   items_input_moneyend = (String)request.getParameter("textmoney2");
   items_input_subset=(String)request.getParameter("textsubset");
   items_input_accountno=(String)request.getParameter("textaccountno"); //下面含有复合查询语句,麻烦就在这
   sql="select v.DocDate DocDate1,v.BankNo BankNo1,v.BatchNo BatchNo1,v.ItemNo ItemNo1,v.SerialsNo SerialNo1,v.Proof Proof1,v.Amount Amount1,v.VchNum VchNum1,v.Subset Subset1,v.AcsyNum AcsyNum1,p.PicPt PicPt1,p.AcsyNo AcsyNo1,p.ReceiptNo ReceiptNo1,p.WritedCD ,p.HDPath,p.CDPath,p.PicVolume,p.IdxDir IdxDir1,p.fName fName1 ,p.bName bName1 from VchRecords v,PicInfs p";    
   
   if (!items_input_docdatebegin.trim().equalsIgnoreCase(""))
   {   
      if (firstCondition)
      {
         firstCondition=false;
     sql=sql+" where v.DocDate>='"+items_input_docdatebegin+"'";
      }
      else
      {
     sql=sql+" and v.DocDate>='"+items_input_docdatebegin+"'";
      }
   }
   
   if (!items_input_docdateend.trim().equalsIgnoreCase(""))
   {   
       if (firstCondition)
       {
      firstCondition=false;
      sql=sql+" where v.DocDate<='"+items_input_docdateend+"'";
       }
       else
       {
      sql=sql+" and v.DocDate<='"+items_input_docdateend+"'";
       }
   }
   
   if (!items_input_moneybegin.trim().equalsIgnoreCase(""))
   {   
       if (firstCondition)
       {
      firstCondition=false;
      sql=sql+" where v.Amount>=$"+items_input_moneybegin;
       }
       else
       {
      sql=sql+" and v.Amount>=$"+items_input_moneybegin;
       }
   }
   
   if (!items_input_moneyend.trim().equalsIgnoreCase(""))
   {   
       if (firstCondition)
       {
      firstCondition=false;
      sql=sql+" where v.Amount<=$"+items_input_moneyend;
       }
       else
       {
          sql=sql+" and v.Amount<=$"+items_input_moneyend;
       }
    }
   
   if (!items_input_subset.trim().equalsIgnoreCase(""))
   {   
       if (firstCondition)
       {
      firstCondition=false;
      sql=sql+" where Subset='"+items_input_subset+"'";
       }
       else
       {
      sql=sql+" and Subset='"+items_input_subset+"'";
       }
    }
   if (firstCondition)
   {
      firstCondition=false;
      sql=sql+" where v.DocDate = p.DocDate and v.BankNo = p.BankNo and v.BatchNo=p.BatchNo and v.PicPt = p.PicPt and v.AcsyNum=p.AcsyNo and p.AcsyNo=0 order by v.RecordID";
   }
   else
   {
      sql=sql+" and v.DocDate = p.DocDate and v.BankNo = p.BankNo and v.BatchNo=p.BatchNo and v.PicPt = p.PicPt and v.AcsyNum=p.AcsyNo and p.AcsyNo=0 order by v.RecordID";
   }
   
//设置一页显示的记录数  
intPageSize = 1;  //默认为10条记录  //取得待显示页码  
//strPage = request.getParameter("page"); if(strPage == null)
{
   intPage = 1;  
}
else
{//将字符串转换成整型
   intPage = Integer.parseInt(strPage);
   if(intPage < 1)
   intPage = 1;  
}  
rs = sqlbean.executeQuery(sql);  
//0325 modified 分页功能修改  yjb 
//获取记录总数  
rs.last();  
intRowCount = rs.getRow();  //记算总页数  
intPageCount = (intRowCount+intPageSize-1) / intPageSize;  //调整待显示的页码  
if(intPage>intPageCount) intPage = intPageCount;  
if(intPageCount>0)
{  
   rs.absolute((intPage-1) * intPageSize + 1);  
   i = 0;
   while(i<intPageSize && !rs.isAfterLast())
   {  
          sdocdate= rs.getString("DocDate1");
          sbankno= rs.getString("BankNo1");
          sbatchno= rs.getString("BatchNo1");
          sitemno= rs.getString("ItemNo1");
          sserialsno= rs.getString("SerialNo1");
          sproof= rs.getString("Proof1");
          samount= rs.getString("Amount1");
          svchnum= rs.getString("VchNum1");
          ssubset= rs.getString("Subset1");
          sacsynum= rs.getString("AcsyNum1");
          spicpt= rs.getString("Picpt1");
          sImageAddressDir= rs.getString("IdxDir1");
          sImageAddressFile=rs.getString("fName1");
          
          rowno = rs.getRow();
          
%>  
    <tr onclick=setbg(this)> 
      <td width="180">
        <div align="center"><%=sdocdate%></div></td>
      <td width="50">
        <div align="center"><%=sbankno%></div></td>
      <td width="50">
        <div align="center"><%=sitemno%></div></td>
      <td width="50">
        <div align="center"><%=samount%></div></td>
      <td width="50">
        <div align="center"><%=ssubset%></div></td>
      <%
          if (!sImageAddressFile.trim().equalsIgnoreCase("") && !sImageAddressDir.trim().equalsIgnoreCase("") )
          {
              sImageAddress = sImageAddressDir+sImageAddressFile;
              sImageAddress = replaceStr(sImageAddress,"\\","_______");
              %>
             <td width="112" align="center">
             <a href="javascript:showIt('\showImg.jsp?imageaddress=<%=sImageAddress%>&docdate=<%=sdocdate%>&bankno=<%=sbankno%>&itemno=<%=sitemno%>&amount=<%=samount%>&subset=<%=ssubset%>','查询结果<%=rowno%>')">显示图片</a>             
             </td>
     <% 
          }
          else
          {
              sImageAddress = "无相应图片";%>
              <td width="112" align="center"><%=sImageAddress%></a>
             </td> 
    <%    }
    %>    
           
    </tr> <%
      rs.next();
      i++;
   }   %>
</TBODY>
</table>
第<%=intPage%>页  共<%=intPageCount%>页  
<%
out.print(intPage);
if(intPage<intPageCount)
{
%>
<a href="testpage.jsp?page=<%=intPage+1%>">下一页</a>
<%
}
%>
<%
if(intPage>1)
{
%>
<a href="testpage.jsp?page=<%=intPage-1%>">上一页</a>
<%
}
%>  
<%  
//关闭结果集  
sqlRst.close();  
</center></div>
<%@include file="newFoot.inc"%>

解决方案 »

  1.   

    你这种方法可以啊
    我是这么做的:
    我将所有查询条件都放在url中,在翻页时,利用javascript将url做一些小的改动,以下是我的一个javascript函数,主要的是其中我标记的一句:
    function TurnToXPage(a)

      if (parent.rightFrame.form1)
      {
     if (!parent.rightFrame.form1.PageCount)
     {alert(" 浏览页面没载入完成,请重试!");return false;}
      }
      else
     {
      alert(" 浏览页面没载入完成,请重试!");  return false;
     }  var mystring=new String(parent.rightFrame.location);
      mystring=mystring.toUpperCase();
      a=a.toUpperCase();
      if (mystring.indexOf("NODEID=")==-1 && mystring.indexOf("PAGENO=")==-1)
          {alert("当前的页面不能翻页,请选择资源范围!");return false;}
      else
          { var pagenum=1;
            var CurrentPage=parseInt(parent.rightFrame.form1.PageNo.value);
            var TotalPage=parseInt(parent.rightFrame.form1.PageCount.value);     
    if (TotalPage=="0")
    {
    alert("仅有一页!");return false;
    }
            switch(a)
             {
               case "N":
                  if (CurrentPage<TotalPage)
                     { pagenum=CurrentPage+1;
     }
                  else
                     { alert("已经是最后一页了!");return false;}
                  break;
               case "L":
                      if (CurrentPage==TotalPage)
                        {alert("已经是最后一页了!");return false;}
              else
            pagenum=TotalPage;
                  break;
               case "F":
          if (CurrentPage<2 )
     {alert("已经是第一页了!");return false;}  
      else
           pagenum=1;
      break;
               case "P":
                  if (CurrentPage>1)
                     { pagenum=CurrentPage-1;}
                  else
                     { alert("已经是第一页了!");return false;}
                  break;
               default:
                  alert("翻页参数错误!(TurnToXPage:a="+a+")");
                  return false;
             }
            mystring=mystring.replace("PAGENO="+CurrentPage,"PAGENO="+pagenum);
            这句就是你要的解决方法:用新的页码数代替原来的页码数 //alert(mystring)
    if (mystring.search("TFLAG=1")!=-1){
                mystring=mystring.replace("TFLAG=1","TFLAG=0");
    }else if (mystring.search("TFLAG=0")==-1)
    {
    mystring = mystring+"&TFLAG=0"
    }
    var FolderC=parent.TypeFrame.form1.FolderC.value
    var RecordC=parent.TypeFrame.form1.RecordC.value
    if (mystring.search("FOLDERC=")==-1)
    {
    mystring = mystring+"&FolderC="+FolderC+"&RecordC="+RecordC
    }
    //alert(mystring)
            parent.rightFrame.location=mystring;
          }
    }看看可以帮你不
      

  2.   

    其实就是你的.jsp页多带几个参数就可以吧,你的查询条件输入应该对应很多的text之类吧,作为直接使用“上一页”等进行翻页时将参数带进去不就可以了。
    比如:
    有两个输入框分别是:txta,txtb
    在使用查询时:String a = reqeust.getParameter("txta");String b = request.getParameter("txtb");
    然后在生成“上一页”的时候用
    test.jsp?txta=<%=a%>&txtb=<%=b%>&page=...
    不就可以了吗
      

  3.   


    只要你提交查询的时候将信息跟在url上,以后分页的时候都取location,然后替换页码,就一切轻松搞定,就是上面的js
      

  4.   

    他们说的办法都正确,我说另外两个方法,参考一下吧.
    1.将sql语句生成后作为一个参数传递.
    2.如果参数太多都放在后面太麻烦,比如我做的系统还要排序,排序还有正序和倒序等,我在页面上加了一些<input type=hidden>把这些值放在里面,翻页时将form提交
      

  5.   

    To: jcq(疯子弟) 我也是采用这种方法,但在测试中,第一次查询的时候是没有错误,可以完全正确显示,但点击"下一页"的时候,就会报错,我打印出来查询的语句,那个sql查询的条件根本取不到,原因就在: 在使用查询时:
     String a = reqeust.getParameter("txta");
     String b = request.getParameter("txtb");
     **** 开始的时候在上个页面query.jsp中点击"查询"后,可以取到a,b的值,但在这个页面中点击"下一页"的时候,a,b的值为空,根本取不到!!!
    " test.jsp?txta=<%=a%>&txtb=<%=b%>&page=... "
    我是这么带参数进去的.请问是为什么??
      

  6.   

    关键是在这些语句中:
    items_input_docdatebegin= (String)request.getParameter("textfield2")+(String)request.getParameter("textfield3")+(String)request.getParameter("textfield4");
       items_input_docdateend=(String)request.getParameter("textfield22")+(String)request.getParameter("textfield32")+(String)request.getParameter("textfield42");
       items_input_moneybegin = (String)request.getParameter("textmoney1");
       items_input_moneyend = (String)request.getParameter("textmoney2");
       items_input_subset=(String)request.getParameter("textsubset");
       items_input_accountno=(String)request.getParameter("textaccountno");点击上一页,下一页的时候,取值都是空值,为什么????
      

  7.   

    你有在上一页,下一页的<a> 中的url设置正确吗?有把这些参数带上吗
      

  8.   

    <a href="jdbc20-oracle.jsp?page=<%=intPage+1%>">下一页</a>
    就是这个地方你应该是这样:
    <a href="jdbc20-oracle.jsp?page=<%=intPage+1%>&textfield2=<%=request.getParameter("textfield2")%>&textfield3=<%request.getParameter("textfield3")%>&.....">下一页</a>
      

  9.   

    现在还用这样的方法在做分页吗??我个人觉得你们的解决方法都不好,给个mail我发给你代码,相信你会喜欢的。
      

  10.   

    to meizizi(怪怪):
    说来听听。
      

  11.   

    首先你在jsp中用了大量的java代码,这不符合做程序的标准! 
    在jsp中直接写代码也就限制了你要在jsp中直接操作结果集。
    java该用的比较精华的东西都不去用。 
    .......
      

  12.   

    思路倒是没有,可以发表一点拙见: 首先在jsp中java代码越少越好,越清晰越好好,翻页功能有个特点,就是要在很多的数据中进行来回的滚动,RS就不适合来当这个对象了,应该用Iterator 这个对象来做是最佳的选择。因为你用RS那你的Connecton就不能关闭,也不可它用。对连接资源是很大的浪费,connection是很宝贵的资源。
    还有很多在此不一一说明了。
      

  13.   

    to meizizi(怪怪):
    jsp中越清晰越好,这个我同意,我还用taglib写过呢,不过这应该跟用什么方法分页应该没有什么关系吧。关于Connection不能关闭,我不同意呢,一次request后调用完这个页面后,我想connection应该就可以释放了吧,当然我想你释放到连接池就可以了。是不是看struts及jive看太多了。不是什么都一定要这样的,要看是不是适合呢。
      

  14.   

    使用JavaBean,利用属性存入每页的记录数据,默认状态下是以那个字段的什么方式排序等。
    在jsp文件中通过setter方法来改变bean中的属性来完成整个操作。
      

  15.   

    to jcq(疯子弟) 我说的应用并不是在Struts中用的, 你说的对啊,如果你用完了这个页面connection是可以释放的啊,但如果你不离开这个页面,因为你的rs在页面中,所以你就不能关闭connection,完全可以做到翻业还在继续,但我的connection已经可以为它用,或是释放了。
    而且这和把connection释放到什么地方没有关系。有特定的应用连接是不要关闭的呢,因为得到一个连接要花费的资源也是很可观的。 是可以把一个连接给另一个操作用的。taglib 是好东西,但我说的还用不到呢,因为没有必要!jsp中的代码不多!
      

  16.   

    to xmpp(火狐狸) 是个很好的思路!
      

  17.   

    to jcq(疯子弟) 鄙人刚来此地,全为讨论技术问题,不会发表偏见!
      

  18.   

    楼上的都讲的不错,我的那个问题解决了,是因为一个语法的错误.现已修正.
    今天我看书发现和xmpp(火狐狸)讲的雷同的一个分页方法,我把思路也说说:1.使用一个javabean类来记录分页page的各个属性,如下:
    public class page
    {
      public int pageCount ;  //  一共有多少页
      public int recordCount; //   查询的记录条总数
      public int pageId ;     //   将要显示的页码
      public int pageSize;    //   每页规定的显示记录条数
    }
    2.然后在jsp里面利用Vector 创建一个数组 
    Vector idList=net Vector();
    .......
    ......
    ......
    然后把各个属性值填进去.
    3.在每次分页的时候,从session里面取出idList里面的pageId来作为开始的记录号,顺序取出记录数就ok了.
     见<jsp程序设计精彩百例>ps:大家都是同行,讨论问题只是为了更好解决问题,却勿大火气 :)
      

  19.   

    好了,兄弟,买单了,特别感谢jcq(疯子弟)短消息的帮助和关注!
    再开一贴散分