可滚动结果集

本文介绍了一种利用可滚动ResultSet(ResultSet.TYPE_SCROLL_INSENSITIVE)处理数据库查询结果的方法。通过具体示例展示了如何使用next()、previous()等方法来遍历结果集,以及如何根据条件进行相对或绝对定位。此外,还提供了从数据库获取股票信息并将其存储在ConcurrentLinkedQueue中的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     网络文摘"
     滚动特性:
  next(),此方法是使游标向下一条记录移动。
  previous() ,此方法可以使游标上一条记录移动,前提前面还有记录。
  absolute(int row),可以使用此方法跳到指定的记录位置。定位成功返回true,不成功返回false,返回值为false,则游标不会移动。
  afterLast() ,游标跳到最后一条记录之后。
  beforeFirst() ,游标跳到第一条记录之前。(跳到游标初始位)
  first(),游标指向第一条记录。
  last(),游标指向最后一条记录。
  relative(int rows) ,相对定位方法,参数值可正可负,参数为正,游标从当前位置向下移动指定值,参数为负,游标从当前位置向上移动指定值。
  TYPE_FORWARD_ONLY ,该常量指示指针只能向前移动的 ResultSet 对象的类型。 
  TYPE_SCROLL_INSENSITIVE ,该常量指示可滚动但通常不受其他的更改影响的 ResultSet 对象的类型。 
  TYPE_SCROLL_SENSITIVE ,该常量指示可滚动并且通常受其他的更改影响的 ResultSet 对象的类型。

应用:
  1. public ConcurrentLinkedQueue getStockInfoQueue(String table, String stockCode ){   //从数据库中取出股票信息,保存到队列,并返回队列
  2.         ConcurrentLinkedQueue<RTmm> clq = new ConcurrentLinkedQueue<RTmm>();
  3.         String sql = "select * from "+table +" where s_code = '" +stockCode+"'";
  4.         String sql2 = "select count(*) from "+table +" where s_code = '" +stockCode+"'";
  5.         try {
  6.             Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);  //可滚动结果集
  7.             ResultSet rs2 = stmt.executeQuery(sql2);
  8.             rs2.last();
  9.             System.out.println("记录数"+rs2.getInt(1));
  10.             int records = rs2.getInt(1);   //得到记录个数
  11.             ResultSet rs = stmt.executeQuery(sql);
  12.             if(records < 60){
  13.                 while(rs.next()){
  14.                     String code = rs.getString(1);
  15.                     String time = rs.getString(3);
  16.                     double open = rs.getDouble(4);
  17.                     double close = rs.getDouble(5);
  18.                     double low = rs.getDouble(6);
  19.                     double high = rs.getDouble(7);
  20.                     // RTmm(String code, String dt, double low, double open, double close, double high) 
  21. //                  System.out.println(code+time+open+"  "+close+"  "+high);
  22.                     RTmm rtmm = new  RTmm(code.trim(), time.trim(), low,  open, close, high);
  23.                     clq.add(rtmm);
  24.                 }
  25.             }else{
  26.                 rs.absolute(records - 60);
  27.                 while(rs.next()){
  28.                     String code = rs.getString(1);
  29.                     String time = rs.getString(3);
  30.                     double open = rs.getDouble(4);
  31.                     double close = rs.getDouble(5);
  32.                     double low = rs.getDouble(6);
  33.                     double high = rs.getDouble(7);
  34.                     // RTmm(String code, String dt, double low, double open, double close, double high) 
  35. //                  System.out.println(code+time+open+"  "+close+"  "+high);
  36.                     RTmm rtmm = new  RTmm(code.trim(), time.trim(), low,  open, close, high);
  37.                     clq.add(rtmm);
  38.                 }
  39.             }
  40.         } catch (SQLException  e) {
  41.             e.printStackTrace();
  42.         }
  43.         return clq;
  44.     }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值