谢谢。

解决方案 »

  1.   

    statement.setFetchSize():  
        设置从数据库取得多行的行数大小
      

  2.   

    但是我测试了一下,像这样:Statement stmt = conn.createStatement();
    ResultSet rsset = stmt.executeQuery("SELECT * FROM user LIMIT 30");
    rsset.setFetchSize(10);
    while(rsset.next()){
     //这里还是30条记录,setFetchSize()没有起作用啊。
    }这是怎么回事呢?
      

  3.   

    setFetchSize()  
    是设置ResultSet每次向数据库取的行数 
    但是你要这样还是可以把所有的数据都取出来,这个只是优化了,取不完数据的情况下setMaxRows()
    是设置Resultset最多返回的行数 
    用下面这个方法才能满足你的要求  
      

  4.   

    ResultSet
    setFetchSize
    void setFetchSize(int rows)
                      throws SQLException为 JDBC 驱动程序设置此 ResultSet 对象需要更多行时应该从数据库获取的行数。如果指定的获取大小为零,则 JDBC 驱动程序忽略该值,随意对获取大小作出它自己的最佳猜测。默认值由创建结果集的 Statement 对象设置。获取大小可以在任何时间更改。 Statement
    setFetchSize
    void setFetchSize(int rows)
                      throws SQLException为 JDBC 驱动程序提供关于需要更多行时应该从数据库获取的行数的提示。指定的行数仅影响使用此语句创建的结果集合。如果指定的值为 0,则忽略该提示。默认值为零。 
      

  5.   

    缺省时,驱动程序一次从查询里获取所有的结果。这样可能对于大的数据集来说是不方便的, 因此 JDBC 驱动提供了一个方法从一个数据库游标伤抽取少数几行的 ResultSet 的方法。在链接的客户端这边缓冲了一小部分数据行,并且在用尽之后, 则通过重定位游标检索下一个数据行块。 
      

  6.   

    比如说吧: 搜索的是 100行,游标开始是 0 ,setFetchSize(20),是不是从0 - 20行。如果游标往下走,就是 20-40?
      

  7.   

    setFetchSize最主要是为了减少网络交互次数设计的
    访问ResultSet时,如果它每次只从服务器上取一行数据,则会产生大量的开销。setFetchSize的意思是当调用rs.next时,ResultSet会一次性从服务器上取得多少行数据回来,这样在下次rs.next时,它可以直接从内存中获取出数据而不需要网络交互,提高了效率。这个设置可能会被某些JDBC驱动忽略的,而且设置过大也会造成内存的上升。
      

  8.   

    这么多的废话。 加上ResultSet.TYPE_SCROLL_INSENSITIVE,  ResultSet.CONCUR_UPDATABLE不就可以了吗。