再写JDBC时,最后得到的ResultSet对象保存了所查询的数据。
ResultSet rz=null;
PreparedStatement ps=null;
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
怎么样获取rz共有多少条记录???
就像下面一样最后i的值就是rz中的记录数,但是下面这样太麻烦,有简单的办法没???
int i=0;
while(rz.next()){
   i++;
}

解决方案 »

  1.   

    这种方式就挺好的,但如果你是要获取一个表有几条记录,应该是通过select count(*) from table_name这样的sql语句来完成该功能
      

  2.   

    int i=0; 
    while(rz.next()){ 
      i++; 
    }
    这样是能够得到,但是光标就移动到最后了,
    如果再使用
    while(rz.next()){ }
    来打印查询的数据的话,光标就在最后,就无法进入while循环了。
    通过first() 或者beforeFirst() 方法来移动光标的话,会报错误,无法移动~
    该怎么办??
      

  3.   

    ps=conn.prepareStatement(sql); 
    这一句先加上结果集可回卷参数:
    ps = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
    然后得到rs后,先rs.last();int count = rs.getRows();
    就是总数,然后再rs.first();又回到没有last的开始位置就可以正常NEXT了
      

  4.   

    rs.last();
    int count = rs.getRows();
    要记住游标的类型要改成可以前后移动的
      

  5.   

    rs.last(); 
    rs.getRows()就是你要的结果了
    但是要注意游标的位置
      

  6.   


    package com.db;import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;public class testMysqlConn {  private static String Driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
      private static String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=testing";
      private static String user = "sa";
      private static String password = "*****";
      private static Connection con = null;
      private static PreparedStatement pstmt = null;
      private static ResultSet rs = null;  public static void main(String[] args) {
        try {
          Class.forName(Driver);// 加载数据库驱动
          con = DriverManager.getConnection(url, user, password);// 连接数据库
          String sql = "select * from table1";
          pstmt = con.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
          rs = pstmt.executeQuery();
          rs.next();
          rs.last();
          int count = rs.getRow();
          System.out.println("count=" + count);
          rs.beforeFirst();
          while (rs.next()) {
            //do your own
          }
        } catch (Exception ex) {
          ex.printStackTrace();
        }
      }}
      

  7.   

    楼上正解。不过我不了解热sultset的这个用法。所以第一想到的是其他两种方法。
    1。定义int i,做为计数器,while(rs.next) 的时候,i++~~最后的i值就是rs得到的纪录数。
    1。一般有需要的话,我会把每一个rs得到的对象加到一个集合(List)里面,最后用list.size()的方法也就知道纪录的条数了。。
      

  8.   

    如果说你用select *的话,假设表里的数据很多..............这非常非常非常的占内存~~~~~~~~~~~~~~~~~~~~~~~~~~~
    一般情况下都是用count(*)来做.
    比如说在分页的时候:往往一个是计算总数,另一个用来查询对应的数据
      

  9.   

    这个没用过,感觉挺不错的,
    顶一下,我一般用聚合函数count,呵呵
      

  10.   

    很简单
    创建可滚动的结果集
     ps = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); 
    然后调用ResultSet的last()方法,此时游标会移动到结果集的最后的一条记录
    再调用ResultSet的getRows()方法