zoukankan      html  css  js  c++  java
  • JDBC 如何使用可滚动 可更新结果集

    从JDBC 2.0后:

    1. ResultSet就可以在结果集上前后移动并且可以跳转到结果集中的任何位置;

    2. 支持可更新的结果集,直接在ResultSet里边修改数据,并且同步到数据库中。

    这两个新特性都是在创建新会话时指定的,语法如下:

    Statement stmt = conn.createStatement(sql, type_SCROLL/type_UPDATEABLE, concurrency);
    PreparedStatement pstmt = conn.preeparedStatement(sql, type_SCROLL/type_UPDATEABLE, concurrency);

      

    其中:

    type_SCROLL类型可以为以下值:

    TYPE_FORWARD_ONLY: 结果集不能滚动
    TYPE_SCROLL_INSENSITIVE: 结果集可以移动,但是对数据库变化不敏感,数据库查询生成结果集后发生了变化,结果集不发生变化
    TYPE_SCROLL_SENSITIVE: 结果集可以移动,但是对数据库变化敏感
    

      

    type_UPDATEABLE类型可以为以下值:

    CONCUR_READ_ONLY: 结果集不能用于更新数据库
    CONCUR_UPDATEABLE: 结果集可以用于更新数据库
    

      

    示例:

    public ConcurrentLinkedQueue getStockInfoQueue(String table, String stockCode ){   //从数据库中取出股票信息,保存到队列,并返回队列
            ConcurrentLinkedQueue<RTmm> clq = new ConcurrentLinkedQueue<RTmm>();
            String sql = "select * from "+table +" where s_code = '" +stockCode+"'";
            String sql2 = "select count(*) from "+table +" where s_code = '" +stockCode+"'";
            try {
                Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);  //可滚动结果集
                ResultSet rs2 = stmt.executeQuery(sql2);
                rs2.last();
                System.out.println("记录数"+rs2.getInt(1));
                int records = rs2.getInt(1);   //得到记录个数
                ResultSet rs = stmt.executeQuery(sql);
                if(records < 60){
                    while(rs.next()){
                        String code = rs.getString(1);
                        String time = rs.getString(3);
                        double open = rs.getDouble(4);
                        double close = rs.getDouble(5);
                        double low = rs.getDouble(6);
                        double high = rs.getDouble(7);
                        // RTmm(String code, String dt, double low, double open, double close, double high) 
    //                  System.out.println(code+time+open+"  "+close+"  "+high);
                        RTmm rtmm = new  RTmm(code.trim(), time.trim(), low,  open, close, high);
                        clq.add(rtmm);
                    }
                }else{
                    rs.absolute(records - 60);
                    while(rs.next()){
                        String code = rs.getString(1);
                        String time = rs.getString(3);
                        double open = rs.getDouble(4);
                        double close = rs.getDouble(5);
                        double low = rs.getDouble(6);
                        double high = rs.getDouble(7);
                        // RTmm(String code, String dt, double low, double open, double close, double high) 
    //                  System.out.println(code+time+open+"  "+close+"  "+high);
                        RTmm rtmm = new  RTmm(code.trim(), time.trim(), low,  open, close, high);
                        clq.add(rtmm);
                    }
                }
            } catch (SQLException  e) {
                e.printStackTrace();
            }
            return clq;
        }
    

      

    滚动特性:

      next(),此方法是使游标向下一条记录移动。

      previous() ,此方法可以使游标上一条记录移动,前提前面还有记录。

      absolute(int row),可以使用此方法跳到指定的记录位置。定位成功返回true,不成功返回false,返回值为false,则游标不会移动。

      afterLast() ,游标跳到最后一条记录之后。

      beforeFirst() ,游标跳到第一条记录之前。(跳到游标初始位)

      first(),游标指向第一条记录。

      last(),游标指向最后一条记录。

      relative(int rows) ,相对定位方法,参数值可正可负,参数为正,游标从当前位置向下移动指定值,参数为负,游标从当前位置向上移动指定值。

  • 相关阅读:
    HDU 5528 Count a * b 欧拉函数
    HDU 5534 Partial Tree 完全背包
    HDU 5536 Chip Factory Trie
    HDU 5510 Bazinga KMP
    HDU 4821 String 字符串哈希
    HDU 4814 Golden Radio Base 模拟
    LA 6538 Dinner Coming Soon DP
    HDU 4781 Assignment For Princess 构造
    LA 7056 Colorful Toy Polya定理
    LA 6540 Fibonacci Tree
  • 原文地址:https://www.cnblogs.com/dartagnan/p/2172722.html
Copyright © 2011-2022 走看看