ResultSet不返回所有值

时间:2015-10-19 10:37:54

标签: java oracle resultset

我正在加载到数据库表8000关于用户的记录,我正在对该数据进行一些操作,最后我想收回我的8000条记录。我的代码:

public void getBalance(String database){
    Connection conn=null;
    Statement stmt=null;
    ResultSet rs=null;
    try{
         Class.forName("oracle.jdbc.driver.OracleDriver");
           conn=DriverManager.getConnection(
                "jdbc:oracle:thin:@address","user","password");
          stmt=conn.createStatement();
          rs=stmt.executeQuery("select count(*) from balance1");
          int count=0;
          while(rs.next()){
            count=rs.getInt(1);
           }
           System.out.println("The count is "+count);
           conn.setAutoCommit(false);
           stmt.setFetchSize(count);    
           rs = stmt.executeQuery("select * from balanceview");
           writeToAFile(rs);
    }catch(Exception e){
         e.printStackTrace();
     }finally{
        if(conn!=null){
            try{
                conn.close();
            }catch(Exception e){
                _logger.severe(e.getMessage());
                e.printStackTrace();
            }
        }if(stmt!=null){
            try{
                stmt.close();
            }catch(Exception e){
                _logger.severe(e.getMessage());
                e.printStackTrace();
            }
        }if(rs!=null){
            try{
                rs.close();
            }catch(Exception e){
                _logger.severe(e.getMessage());
                e.printStackTrace();
            }
        }
    }
}

但我遇到的问题只返回2000个值。有没有办法返回所有8000个值。

1 个答案:

答案 0 :(得分:0)

JDBC将始终将默认行数(而不是整个结果集)提取到本地内存。一旦到达获取行的最后一行(比如通过执行next()并尝试访问下一行),如果结果中有更多行,则将对数据库进行另一次往返调用以获取下一行批量行到本地内存。

即使您可以设置要在本地内存中获取的行数,也可以考虑使用CachedRowSet。

当你在Statement上设置fetchSize()时,你只是给JDBC驱动程序一个指令,你应该提取多少,但JDBC驱动程序可以忽略你的指令。我不知道Oracle驱动程序对fetchSize()的作用。大多数情况下,它观察到MySQL JDBC驱动程序将始终获取所有行,除非您将fetchSize()设置为Integer.MIN_VALUE,但Oracle数据库不是这种情况。