如果执行一条sql语句select * from table where...的话 可以返回一个ResultSet结果集对象。假如我这张表里的符合条件的数据有100W,结果集里不可能存100W行数据吧,它应该有个默认限制,而且可以通过setFetchSize()来设置这个限制。现在我有一个问题,比如所限制是100条数据。当我想用第101条数据时怎么办?

解决方案 »

  1.   

    ResultSet走的是游标,是建立一个连接,一直连接着,然后通过游标到数据库里面取的。
      

  2.   

    要不然ResultSet对象一下子就暴掉了,或者说你Java应用内存就爆掉了
      

  3.   


    好像楼主对setFetchSize的理解有点问题。如果 setFetchSize(100), 而实际有200条数据,那只是意味着Java程序要到数据库 Fetch 两次而已。ResultSet 里还是会有200条数据。
      

  4.   

    setFetchSize设置是指每次到数据库中取数据的行数,不是指总共返回多少行
      

  5.   

    fetch方法是否是JDBC程序自己负责执行的呢?
      

  6.   

    .默认的 ResultSet 对象不可更新,仅有一个向前移动的指针。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。可以生成可滚动和/或可更新的 ResultSet 对象。以下代码片段(其中 con 为有效的 Connection 对象)演示了如何生成可滚动且不受其他更新影响的、可更新的结果集。请参阅 ResultSet 字段以了解其他选项。 Statement stmt = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, 
                                                                            ResultSet.CONCUR_UPDATABLE); 
    ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2"); 
    // rs will be scrollable, will not show changes made by others, 
    // and will be updatable 
    2.更新当前行中的列值。在可滚动的 ResultSet 对象中,可以向前和向后移动指针,将其置于 
    绝对位置或相对于当前行的位置。以下代码片段更新 ResultSet 对象 rs 的第五行中的 NAME 列, 
    然后使用方法 updateRow 更新用于派生 rs 的数据源表。 
    rs.absolute(5); // moves the cursor to the fifth row of rs 
    rs.updateString("NAME", "AINSWORTH"); // updates the 
    // NAME column of row 5 to be AINSWORTH 
    rs.updateRow(); // updates the row in the data source 
    3.综合运用: 
    Statement stmt = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, 
                                                                            ResultSet.CONCUR_UPDATABLE); 
    ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2"); 
    while(rs.next()) 

    rs.moveToCurrentRow();//如果不加此句,常发生update failed 错误 
    rs.updateString(1,"new");//将字段a的所有记录更新为'new' 
    rs.updateRow(); 
    } 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/whxiaolezi/archive/2007/09/27/1803761.aspx