结果集不返回所有值



我正在向数据库表加载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个值

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

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

当您在语句上设置fetchSize()时,您只是向JDBC驱动程序提供了您希望它应该获取多少的指令,但是JDBC驱动程序可以自由地忽略您的指令。我不知道Oracle驱动程序对fetchSize()做了什么。大多数情况下,MySQL JDBC驱动程序将始终获取所有行,除非您将fetchSize()设置为Integer。

相关内容

  • 没有找到相关文章

最新更新