sqlserver数据库分页问题

sqlserver数据库分页问题,急、、、

楼主zhaosy(盛) 2005-11-03 11:04:18 在 Java / J2SE / 基础类 提问

各位兄弟姐妹,这个程序再oracle、mysql上执行没任何问题  
  其中:$where为条件,currentPage为当前页码,totalRecords为记录总数,numPerPage为页记录数  
  在oracle、mysql上可以返回正确的记录总数,但在sqlserver上返回记录总数为-3,是何原因啊?  
  应该如何去改正呢?谢谢各位了!  
  public   static   List   query(String   $where,   Integer   currentPage,  
                                                        AIInteger   totalRecords,   int   numPerPage)   {  
          List   templist   =   new   ArrayList();  
          Connection   conn   =   null;  
          Statement   stmt   =   null;  
          ResultSet   rs   =   null;  
          try   {  
              conn   =   MyDBHelper.getConnection();  
              stmt   =   conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,  
                                                                      ResultSet.CONCUR_READ_ONLY);  
              rs   =   stmt.executeQuery(sql);  
              rs.last();                                                                                                             //1>处  
              totalRecords.setValue(rs.getRow());                                                           //2>处  
              System.out.println("current   page:=   "   +   currentPage.toString()   +  
                                                    ";   total:=   "   +  
                                                    totalRecords   +   ";   numPerPage:=   "   +   numPerPage);  
              if   (currentPage.intValue()   >   1)  
                  rs.absolute(   (currentPage.intValue()   -   1)   *   numPerPage);  
              else  
                  rs.beforeFirst();  
              rs.setFetchSize(numPerPage);  
   
              while   (rs.next())   {  
                  、  
                  、  
                  、  
                  tempList.add(temp);  
                  numPerPage--;  
              }  
              rs.close();  
              stmt.close();  
          }  
          catch   (SQLException   ex)   {  
              while   (ex   !=   null)   {  
                  System.out.println("Message   :"   +   ex.getMessage());              
              }  
          }  
          catch   (java.lang.Exception   ex)   {  
              ex.printStackTrace();  
          }  
          //释放一个连接到连接池  
          finally   {  
              try   {  
                  conn.close();  
              }  
              catch   (SQLException   sqle)   {  
              }  
          }  
          return   tempList;  
      } 问题点数:100、回复次数:5Top

src="http://topic.csdn.net/Include/Board.htm?Tags=" frameborder="0" scrolling="no">

1 楼treeroot(旗鲁特)回复于 2005-11-03 11:29:00 得分 10

sqlserver   uses   top   clause!  
  mysql   uses   limit   clause!  
  oracle   uses   row_num   function  
   
  using   cursor   is   unefficientTop

2 楼believefym(feng)回复于 2005-11-03 11:30:43 得分 20

有可能是rs.last();的问题  
  你试试next循环计数Top

3 楼zhaosy(盛)回复于 2005-11-03 11:31:14 得分 0

兄弟,能说的具体些吗?怎么改正呢?  
  Top

4 楼keiy()回复于 2005-11-03 11:36:18 得分 50

csdn有多个关于rs.first(),   rs.last()问题的  
  它有时总不能得到期望的结果(与数据库有关,与数据库返回类型表关,如表或光标)  
  这个好像都没有一个合理的解释或解决方案  
  要解决你的问题,可用  
      select   count(*)   recc   form   表   where   条件  
  来先预查记录数Top

5 楼believefym(feng)回复于 2005-11-03 11:42:29 得分 20

获得resultset之后  
  int   counter   =   0;  
  while(resultset.next())  
    counter++;  
   
  来获得总记录数,或者也可以参考楼上的方法  
  last、first等方法经常会有问题Top

相关问题

100分求连接oracle数据库的自写分页代码或算法,感激不尽!

楼主xhjf777(古格国王) 2005-11-05 11:21:15 在 .NET 技术 / C# 提问

如题.  
   
  问题点数:100、回复次数:8Top

src="http://topic.csdn.net/Include/Board.htm?Tags=" frameborder="0" scrolling="no">

1 楼smallMage(小马哥)回复于 2005-11-05 11:50:49 得分 25

搜索一下。太多了。CREATE   PROCEDURE   pagination2  
  (  
    @SQL   nVARCHAR(4000),         --不带排序语句的SQL语句  
    @Page   int,                             --页码  
    @RecsPerPage   int,               --每页

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值