Connection conn = ConnectionManager.getConnection();
    PreparedStatement st = null;
    ResultSet rs = null;    try {
      st = conn.prepareStatement(
          "SELECT * FROM [Supplier] WHERE 1 ORDER BY [SupplierID] DESC");
      rs = st.executeQuery();
      
      //rs.last();
      //rs.getRow();
      //如果上面这样是可以的,但是我要得到记录总数,才能确定String数组的的大小,但是像上面那样的话,就不能再把纪录放到String数组里,我用rs.first();就要报错:java.sql.SQLException: Result set type is TYPE_FORWARD_ONLY,我怎么处理呢?      while (rs.next()) {
        System.out.println(rs.getString("SupplierName"));
        System.out.println(rs.getRow());
      }      return rs;
    }
    catch (SQLException e) {
      System.out.println(e);
    }
    finally {
      try {
        if (rs != null) {
          rs.close();
        }
        if (st != null) {
          st.close();
        }
        if (conn != null) {
          conn.close();
        }
      }
      catch (SQLException e) {
      }
    }

解决方案 »

  1.   

    通过连接取scroll_able的preparedstatement,再取结果集:可以last()和getRow();
      

  2.   

    问:使用JDBC编程,应如何控制结果集ResultSet的指针,使之能够上下移动,以及移动到结果集的第一行和最后一行? 答:在JDK1.1中,ResultSet类中只定义了next()方法支持数据指针的下移.但在Java 2中,ResultSet类增加了如下方法支持数据指针的移动,包括: ResultSet.first():将数据指针移到结果集的第一 ResultSet.last(): 将数据指针移到结果集的最后一行 ResultSet.previous(): 将数据指针上移一行 以上的方法定义在JDBC2.0的规范中,所有支持JDBC 2.0的JDBC驱动程序都可以支持上述方法.目前Intersolv和OpenLink等JDBC驱动程序厂商均有产品支持JDBC 2.0 . 
      

  3.   

    由于采用缓冲机制,很多大型数据库不能返回记录数(包括在C/C++中也一样)
     我的一般做法是,先做一个预查:
      select count(*) recc from 你的表 where 查询条件