CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

关于JDBC访问Oracle返回数据集的记录限制的问题

楼主TechnoFantasy((VB MVP)www.applevb.com)2002-04-30 10:20:28 在 Java / J2SE / 基础类 提问

通过设置Statment的setMaxRows可以设置返回的记录集的最大行数,例如:  
  stmVal.setMaxRows(20);  
  ResultSet   rset1   =   stmVal.executeQuery   (sque);  
  将返回的记录集限制在20条,但是我如何获得后面的数据呢?  
  问题点数:300、回复次数:16Top

1 楼TechnoFantasy((VB MVP)www.applevb.com)回复于 2002-04-30 10:23:28 得分 0

另外对Oracle和Java都熟悉的高手帮我看一下这个问题:  
  http://www.csdn.net/expert/topic/684/684801.xml?temp=.2934229Top

2 楼Adub(午夜狂飙)回复于 2002-04-30 10:25:58 得分 0

我如何获得后面的数据呢?能不能说得明白一点??Top

3 楼lun2001(小伦)回复于 2002-04-30 10:32:57 得分 50

我猜想他的意思是做分页  
  每页有20条记录  
  转到下一页时怎样取下20条记录  
  是吗???Top

4 楼pengji(彭乃超)回复于 2002-04-30 11:12:48 得分 0

int   start=pageNo*20;//开始取得数据的行号  
  sque="select   *   from   test   where   rownum>"+start;  
  stmVal.setMaxRows(20);  
  ResultSet   rset1   =   stmVal.executeQuery   (sque);  
  其实纯粹的使用rownum就能控制每次取得的记录数的,但我觉得奇怪的是JDBC   API中真的没有取得下20条记录的方法,那又何必有设置结果条数的方法呢!?看来JDBC   API这还有不完整的地方,不知道3.0有没有改进!Top

5 楼ahbill(阿漂)回复于 2002-04-30 11:16:05 得分 0

http://go5.163.com/slayers99/arti/notebook/21.htm  
  可以参考一下。Top

6 楼alphazhao(迷路飞羊)回复于 2002-04-30 11:16:20 得分 0

哇,问问题的gg是4星啊  
  我都不敢回了……Top

7 楼ahbill(阿漂)回复于 2002-04-30 11:19:22 得分 0

这是利用rownum来进行记录控制的(供参考)  
  如何正确利用Rownum来限制查询所返回的行数?    
  软件环境:    
  1、Windows   NT4.0+ORACLE   8.0.4  
  2、ORACLE安装路径为:C:\ORANT  
   
  含义解释:    
  1、rownum是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,  
      依此类推,这个伪字段可以用于限制查询返回的总行数。  
  2、rownum不能以任何基表的名称作为前缀。    
  使用方法:    
  现有一个商品销售表sale,表结构为:  
  month      char(6)        --月份  
  sell    number(10,2)   --月销售金额  
   
  create   table   sale   (month   char(6),sell   number);  
  insert   into   sale   values('200001',1000);  
  insert   into   sale   values('200002',1100);  
  insert   into   sale   values('200003',1200);  
  insert   into   sale   values('200004',1300);  
  insert   into   sale   values('200005',1400);  
  insert   into   sale   values('200006',1500);  
  insert   into   sale   values('200007',1600);  
  insert   into   sale   values('200101',1100);  
  insert   into   sale   values('200202',1200);  
  insert   into   sale   values('200301',1300);  
  insert   into   sale   values('200008',1000);  
  commit;  
   
  SQL>   select   rownum,month,sell   from   sale   where   rownum=1;(可以用在限制返回记录条数的地方,保证不出错,如:隐式游标)  
   
        ROWNUM   MONTH               SELL  
  ---------   ------   ---------  
                  1   200001             1000  
   
  SQL>   select   rownum,month,sell   from   sale   where   rownum=2;(1以上都查不到记录)  
   
  没有查到记录  
   
  SQL>   select   rownum,month,sell   from   sale   where   rownum>5;  
  (由于rownum是一个总是从1开始的伪列,Oracle   认为这种条件不成立,查不到记录)  
   
   
  没有查到记录  
   
  只返回前3条纪录  
  SQL>   select   rownum,month,sell   from   sale   where   rownum<4;  
   
        ROWNUM   MONTH               SELL  
  ---------   ------   ---------  
                  1   200001             1000  
                  2   200002             1100  
                  3   200003             1200  
   
   
  如何用rownum实现大于、小于逻辑?(返回rownum在4—10之间的数据)(minus操作,速度会受影响)  
  SQL>   select   rownum,month,sell   from   sale   where   rownum<10  
      2     minus  
      3     select   rownum,month,sell   from   sale   where   rownum<5;  
   
        ROWNUM   MONTH               SELL  
  ---------   ------   ---------  
                  5   200005             1400  
                  6   200006             1500  
                  7   200007             1600  
                  8   200101             1100  
                  9   200202             1200  
   
  想按日期排序,并且用rownum标出正确序号(有小到大)  
  SQL>   select   rownum,month,sell   from   sale   order   by   month;  
   
        ROWNUM   MONTH               SELL  
  ---------   ------   ---------  
                  1   200001             1000  
                  2   200002             1100  
                  3   200003             1200  
                  4   200004             1300  
                  5   200005             1400  
                  6   200006             1500  
                  7   200007             1600  
                11   200008             1000  
                  8   200101             1100  
                  9   200202             1200  
                10   200301             1300  
   
  查询到11记录.  
   
  可以发现,rownum并没有实现我们的意图,系统是按照记录入库时的顺序给记录排的号,rowid也是顺序分配的  
   
  SQL>   select   rowid,rownum,month,sell   from   sale   order   by   rowid;  
   
  ROWID                                   ROWNUM   MONTH               SELL  
  ------------------   ---------   ------   ---------  
  000000E4.0000.0002                   1   200001             1000  
  000000E4.0001.0002                   2   200002             1100  
  000000E4.0002.0002                   3   200003             1200  
  000000E4.0003.0002                   4   200004             1300  
  000000E4.0004.0002                   5   200005             1400  
  000000E4.0005.0002                   6   200006             1500  
  000000E4.0006.0002                   7   200007             1600  
  000000E4.0007.0002                   8   200101             1100  
  000000E4.0008.0002                   9   200202             1200  
  000000E4.0009.0002                 10   200301             1300  
  000000E4.000A.0002                 11   200008             1000  
   
  查询到11记录.  
   
  正确用法,使用子查询  
  SQL>   select   rownum,month,sell   from   (select   month,sell   from   sale   group   by   month,sell)   where   rownum<13;  
   
        ROWNUM   MONTH               SELL  
  ---------   ------   ---------  
                  1   200001             1000  
                  2   200002             1100  
                  3   200003             1200  
                  4   200004             1300  
                  5   200005             1400  
                  6   200006             1500  
                  7   200007             1600  
                  8   200008             1000  
                  9   200101             1100  
                10   200202             1200  
                11   200301             1300  
   
  按销售金额排序,并且用rownum标出正确序号(有小到大)  
  SQL>   select   rownum,month,sell   from   (select   sell,month   from   sale   group   by   sell,month)   where   rownum<13;  
   
        ROWNUM   MONTH               SELL  
  ---------   ------   ---------  
                  1   200001             1000  
                  2   200008             1000  
                  3   200002             1100  
                  4   200101             1100  
                  5   200003             1200  
                  6   200202             1200  
                  7   200004             1300  
                  8   200301             1300  
                  9   200005             1400  
                10   200006             1500  
                11   200007             1600  
   
  查询到11记录.  
   
  利用以上方法,如在打印报表时,想在查出的数据中自动加上行号,就可以利用rownum。  
   
  返回第5—9条纪录,按月份排序  
  SQL>   select   *   from   (select   rownum   row_id   ,month,sell    
      2     from   (select   month,sell   from   sale   group   by   month,sell))    
      3     where   row_id   between   5   and   9;  
   
          ROW_ID   MONTH                 SELL  
  ----------   ------   ----------  
                    5   200005               1400  
                    6   200006               1500  
                    7   200007               1600  
                    8   200008               1000  
                    9   200101               1100  
   
     
  Top

8 楼ahbill(阿漂)回复于 2002-04-30 11:19:47 得分 0

这是利用rownum来进行记录控制的(供参考)  
  如何正确利用Rownum来限制查询所返回的行数?    
  软件环境:    
  1、Windows   NT4.0+ORACLE   8.0.4  
  2、ORACLE安装路径为:C:\ORANT  
   
  含义解释:    
  1、rownum是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,  
      依此类推,这个伪字段可以用于限制查询返回的总行数。  
  2、rownum不能以任何基表的名称作为前缀。    
  使用方法:    
  现有一个商品销售表sale,表结构为:  
  month      char(6)        --月份  
  sell    number(10,2)   --月销售金额  
   
  create   table   sale   (month   char(6),sell   number);  
  insert   into   sale   values('200001',1000);  
  insert   into   sale   values('200002',1100);  
  insert   into   sale   values('200003',1200);  
  insert   into   sale   values('200004',1300);  
  insert   into   sale   values('200005',1400);  
  insert   into   sale   values('200006',1500);  
  insert   into   sale   values('200007',1600);  
  insert   into   sale   values('200101',1100);  
  insert   into   sale   values('200202',1200);  
  insert   into   sale   values('200301',1300);  
  insert   into   sale   values('200008',1000);  
  commit;  
   
  SQL>   select   rownum,month,sell   from   sale   where   rownum=1;(可以用在限制返回记录条数的地方,保证不出错,如:隐式游标)  
   
        ROWNUM   MONTH               SELL  
  ---------   ------   ---------  
                  1   200001             1000  
   
  SQL>   select   rownum,month,sell   from   sale   where   rownum=2;(1以上都查不到记录)  
   
  没有查到记录  
   
  SQL>   select   rownum,month,sell   from   sale   where   rownum>5;  
  (由于rownum是一个总是从1开始的伪列,Oracle   认为这种条件不成立,查不到记录)  
   
   
  没有查到记录  
   
  只返回前3条纪录  
  SQL>   select   rownum,month,sell   from   sale   where   rownum<4;  
   
        ROWNUM   MONTH               SELL  
  ---------   ------   ---------  
                  1   200001             1000  
                  2   200002             1100  
                  3   200003             1200  
   
   
  如何用rownum实现大于、小于逻辑?(返回rownum在4—10之间的数据)(minus操作,速度会受影响)  
  SQL>   select   rownum,month,sell   from   sale   where   rownum<10  
      2     minus  
      3     select   rownum,month,sell   from   sale   where   rownum<5;  
   
        ROWNUM   MONTH               SELL  
  ---------   ------   ---------  
                  5   200005             1400  
                  6   200006             1500  
                  7   200007             1600  
                  8   200101             1100  
                  9   200202             1200  
   
  想按日期排序,并且用rownum标出正确序号(有小到大)  
  SQL>   select   rownum,month,sell   from   sale   order   by   month;  
   
        ROWNUM   MONTH               SELL  
  ---------   ------   ---------  
                  1   200001             1000  
                  2   200002             1100  
                  3   200003             1200  
                  4   200004             1300  
                  5   200005             1400  
                  6   200006             1500  
                  7   200007             1600  
                11   200008             1000  
                  8   200101             1100  
                  9   200202             1200  
                10   200301             1300  
   
  查询到11记录.  
   
  可以发现,rownum并没有实现我们的意图,系统是按照记录入库时的顺序给记录排的号,rowid也是顺序分配的  
   
  SQL>   select   rowid,rownum,month,sell   from   sale   order   by   rowid;  
   
  ROWID                                   ROWNUM   MONTH               SELL  
  ------------------   ---------   ------   ---------  
  000000E4.0000.0002                   1   200001             1000  
  000000E4.0001.0002                   2   200002             1100  
  000000E4.0002.0002                   3   200003             1200  
  000000E4.0003.0002                   4   200004             1300  
  000000E4.0004.0002                   5   200005             1400  
  000000E4.0005.0002                   6   200006             1500  
  000000E4.0006.0002                   7   200007             1600  
  000000E4.0007.0002                   8   200101             1100  
  000000E4.0008.0002                   9   200202             1200  
  000000E4.0009.0002                 10   200301             1300  
  000000E4.000A.0002                 11   200008             1000  
   
  查询到11记录.  
   
  正确用法,使用子查询  
  SQL>   select   rownum,month,sell   from   (select   month,sell   from   sale   group   by   month,sell)   where   rownum<13;  
   
        ROWNUM   MONTH               SELL  
  ---------   ------   ---------  
                  1   200001             1000  
                  2   200002             1100  
                  3   200003             1200  
                  4   200004             1300  
                  5   200005             1400  
                  6   200006             1500  
                  7   200007             1600  
                  8   200008             1000  
                  9   200101             1100  
                10   200202             1200  
                11   200301             1300  
   
  按销售金额排序,并且用rownum标出正确序号(有小到大)  
  SQL>   select   rownum,month,sell   from   (select   sell,month   from   sale   group   by   sell,month)   where   rownum<13;  
   
        ROWNUM   MONTH               SELL  
  ---------   ------   ---------  
                  1   200001             1000  
                  2   200008             1000  
                  3   200002             1100  
                  4   200101             1100  
                  5   200003             1200  
                  6   200202             1200  
                  7   200004             1300  
                  8   200301             1300  
                  9   200005             1400  
                10   200006             1500  
                11   200007             1600  
   
  查询到11记录.  
   
  利用以上方法,如在打印报表时,想在查出的数据中自动加上行号,就可以利用rownum。  
   
  返回第5—9条纪录,按月份排序  
  SQL>   select   *   from   (select   rownum   row_id   ,month,sell    
      2     from   (select   month,sell   from   sale   group   by   month,sell))    
      3     where   row_id   between   5   and   9;  
   
          ROW_ID   MONTH                 SELL  
  ----------   ------   ----------  
                    5   200005               1400  
                    6   200006               1500  
                    7   200007               1600  
                    8   200008               1000  
                    9   200101               1100  
   
     
  Top

9 楼TechnoFantasy((VB MVP)www.applevb.com)回复于 2002-04-30 11:29:06 得分 0

我知道用rowid可以,我也作出来了,但是我想用setMaxRows的方式,就像Delphi的ClientDataset一样。Top

10 楼pengji(彭乃超)回复于 2002-04-30 14:12:51 得分 0

老师对你说,好象不可以!这也是我纳闷的地方!不知道JDBC3.0可以了吗?!Top

11 楼pengji(彭乃超)回复于 2002-04-30 14:21:47 得分 150

老实说我还不知道怎么做,这也是我\纳闷的地方,怎么JDBC提供了设置大小的方法却没有取得下一个段记录的方法!也许是JDBC2.0的问题,不知道3.0解决了这个问题没!Top

12 楼eyeieye(魔之眼)回复于 2002-04-30 14:38:13 得分 0

不说话,作个记号Top

13 楼lijunyi(lijunyi)回复于 2002-04-30 14:46:41 得分 0

对,一起学习一下:)Top

14 楼wanghl(冷寒)回复于 2002-04-30 15:12:30 得分 0

不错,收益非浅Top

15 楼yellowwee(端木柒)回复于 2002-06-03 18:20:41 得分 0

好厉害,4课红心!!!!!!!Top

16 楼nicholaz(九思·逢尤)回复于 2002-06-11 09:34:37 得分 100

关注,学习Top

17 楼TechnoFantasy((VB MVP)www.applevb.com)回复于 2002-06-11 11:42:43 得分 0

算了,还是用老办法吧。Top

18 楼aswill(小泥鳅不见首尾)回复于 2002-06-11 12:15:40 得分 0

in   your  
  http://www.csdn.net/expert/topic/684/684801.xml?temp=.2934229  
   
  why   not   use   STRUCT?Top

相关问题

  • Oracle的访问限制
  • 如何配置JDBC访问ORACLE
  • vb访问oracle
  • jdbc 访问Oracle数据库中的ResultSet问题
  • 怎样搭建jdbc访问oracle的软件环境?
  • JDBC访问Oracle数据库的奇怪问题
  • 用JDBC访问Oracle的问题,不知道大家遇到过没有
  • JDBC访问Oracle数据库,出现异常!!!!急急急急急急急
  • 通过 ODBC 访问 Oracle
  • 访问ORACLE表问题

关键词

  • .net
  • 查询
  • 数据
  • jdbc
  • oracle
  • 控制
  • rownum
  • sell
  • 记录
  • month

得分解答快速导航

  • 帖主:TechnoFantasy
  • lun2001
  • pengji
  • nicholaz

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo