如何判断ResultSet集合是否为空?

解决方案 »

  1.   

    if(rs.next())
    //true
    else
    //false
      

  2.   

    next()游标下移,如无结果false
      

  3.   

    if(rs==null){}else{},
       老兄,你有没有试过,想当然。这样是没用的。
      

  4.   

    if(rs.next())
    //true
    else
    //false
    if(rs==null){}else{} 别误导人
      

  5.   

    你可以做一个试验,如果要从rs里拿第一个值,必须先用rs.next()。
    实际上next拿到的就是当前位置的值
      

  6.   

    rs.wasNull();//返回boolean值
    这个你有没有试用过,要实事求是去考虑问题.
      

  7.   

    snow_jin(晓灯(172):你说的是没错,但如果用了rs.next()那游标相应的就移动了.
    如果我想再做rs.next()去的数据就不是第一条记录了.
      

  8.   

    rs刚打开是指针是指在第一条记录之前的,就是beforeFirst
    if(rs.next())
    {
       //如果rs不为空,则指向第一条记录
    }
    else
    {
       //rs为空
    }
      

  9.   

    可以用rs.first()来调整游标。
    再者。用while(rs.next())的目的就是取数据。
      

  10.   

    什么指来指去!你以为是点兵点将阿!
    结果集初始化时指针是指在第一条前的,你要去其中的数据就要逐条遍历一遍阿,当然要往下移了,如果是空那么rs.next就返回false了,那知道你想知道的啦。
    “指来指去”你真逗!
      

  11.   

    if(rs.next())
    //true
    else
    //false
      

  12.   

    ------------------------
    那指回前一条,这样指来指去,是不是不完美?
    ------------------------  什么时候指来指去了?
      如果rs是空的话,就退出IF语句了;
      如果不是空的,就继续执行。
      

  13.   

    我不是要去取其中的数据,我只是想判断一下那个resultset是否为空.
      

  14.   

    jim1516(网无忌) :如果那不为空呢.我要去取数据,这回你的游标(指针)已经指向到了第一条记录了.
    如果你还用rs.next()那指针就指向了第二条数据了.第一条也就丢失了.如果要把所有的记录取出.用
    你的方法,必须往回指.
      

  15.   

    呵呵 你没用rs.next();的话 你的结果集怎么判断都是空的  ^_^
      

  16.   

    你用rs.next();判断以后 要取得话你就直接取了 干吗还要用rs.next() 
    如果要取第二条 你就直接用rs.next()移动一下游标不就是了嘛
      

  17.   

    也可以用循环啊
    比如
    while(rs.next())
    {
       将所有的记录放入一个数组里
    }
    到时你想取那条就取哪条
      

  18.   

    1。如果你想知道数据集合里数目而不是要取返回的记录,应该执行select count的查询
    select count(column_name) from table_name;2。如果你要取得其中的各条记录,应该使用next()的方法来判断
    [if/while](rs!=null&&rs.next()){
    }上面两种做法并没有冲突,你要判断ResultSet集合非空与否,无非就是想知道这个查询会返回多少记录和取得这些数据
      

  19.   

    int count = 0;
    while(rs.next()){
    ...
    count++;
    }
    ...处理如果有数据
    然后判断count是否为0
      

  20.   

    呵呵,I 服了 YOU!想问一下,你试过了吗?
      

  21.   

    看你怎么想了如果你只想判断一下rs是否为空,那么if(rs.next){}即使是往下移动了,你要的也不是结果集,也没关系,如果你想不为空的时候做点什么,那么就while(rs.next){}了所以,我感觉,在这个问题上,判断rs当前指向哪条纪录,不是很有意义
      

  22.   

    如果rs为空,rs.next()就已经报错了。
    应该先判断rs是否为空,用if(rs == null){}else{}是对的。
    再while(rs.next()){}
    取每一条记录就行了。
      

  23.   

    补充:rs为空与空记录集不一样的。
    rs为空指rs==null。
    空记录集指rs的count 为0。
    如果要判断是否有记录,
    用while(rs.netxt()){},count为0时会不执行while循环中的内容。
      

  24.   

    但如果用了rs.next()那游标相应的就移动了.
    如果我想再做rs.next()去的数据就不是第一条记录了.
    --------一条记录取到了,不就可以了吗?为什么取了一次还要取一次??
    数据取出来之后,放到程序的变量里,你想用多少次都可以啊,干吗一定要到数据库里再取一次??数据库的访问能避免的尽量避免,经常访问数据库,效率也不高啊
      

  25.   

    if(rs==null)
    if(rs.hasNext())
    if(rs.next()==false)
      

  26.   

    if(!rs.next())
      out.print("数据库为空");
    else
      out.print("数据库不为空");
      

  27.   

    if(!rs.next())
      out.print("数据库为空");
    else {
      out.print("数据库不为空");
      do {
        String name = rs.getString(1);//因为已经next过了,所以已经可以直接取得了
      } while(rs.next());
    }这样就可以一次搞掂啦
      

  28.   

    ChDw(米) 能满足楼主的要求,
    有许多人回答的都没明白楼主的意思。不过我想这样的结果还是不完全楼主的意愿,
    但是没有办法,
    好像只能这样。
      

  29.   

    snow_jin(晓灯(172):你说的是没错,但如果用了rs.next()那游标相应的就移动了.
    如果我想再做rs.next()去的数据就不是第一条记录了.-----------------------废话,不移动不能判断的
    如果你还要第一条纪录的话,自己另外想别的办法
    你也可以重新执行一次,再生成一个记录集
      

  30.   

    楼主的意思不就是需要判断是否为空,如果不为空就取得各行的数据我上面的代码没有问题吧,应该是比较理想的啦。
    另外,根本就不必要再生成一个ResultSet,这样的操作多浪费时间
      

  31.   

    还是Delphi中的DataSet好: DataSet.IsEmpty;
      

  32.   

    严重同意ChDw(米)的说法,楼主是否从C/C++转java啊,对java的ResultSet用法不习惯把,我也经过这样的不适应。其实java的ResultSet得到结果集后,游标是放在第一条记录之前,这时候直接取数据是取不到的。必须经过一次next后才移动到第一条记录。这与C/C++的情况不同。用下面的语句可以rs =stm.executeQuery(".....");
    while(rs.next()) {
        rs.getXXXX(....);
    }上面的语句可以取出所有的结果,如果结果为空,不会执行while里面的语句
      

  33.   

    To  ChDw(米) if(!rs.next())
                  ///////////////如果rs是空,现在是不是就出错了。都空了,还怎么next()?
      out.print("数据库为空");
    else {
      out.print("数据库不为空");
      do {
        String name = rs.getString(1);//因为已经next过了,所以已经可以直接取得了
      } while(rs.next());
    }
      

  34.   

    if(rs.next())
       out.println("Good!!!");
     else
       out.println("Bad!!!");
      

  35.   

    除非出现异常了,否则rs根本不可能为空!!!!!!!!!!!!!!!!!!!!!!!如果你的Select没有返回数据,rs仍然是一个ResultSet对象,仅仅是在第一次调用next方法时候返回false
      

  36.   

    next()的定义:boolean next()  next()本来指向数据库第一条记录的前面,调用rs.next()将指针指向第一条记录,如果数据库为空,那么next()将查不到第一条记录,直接返回false,查到了ok 执行else
      

  37.   

    无记录的话不会抛异常的,只会返回false
      

  38.   

    看样子很多人都没实际开发过嘛,居然好几个人都说用
    if(rs==null)
    笑死我了啊.呵呵...........
      

  39.   

    很老的帖子了,遇到相同问题才搜出来的,我今天在用Dwr做一个实例的时候也遇到了类似的问题,提供一个我已经试验成功的解决方案:代码:
    if(rs.next()){
    list.add(rs.getString(1));
    while(rs.next())
                        {
    int i = 2;
            list.add(rs.getString(i++));
                       }
     return list;
     }else{
     list.add("Sorry,No such User!");
     return list;
     }
    解释一下:最外层用if/else循环,内层while循环,判断如果结果集不为空(rs.next()),那么执行if分支,此时“所谓的”指针已经指向第一条记录了,如果要继续取多条记录,那么只能先以list.add(rs.getString(1))这种方式取出第一条记录,而不能上来就直接while(rs.next()),因为如果这样做,那么此时取出的第一条记录实际上是结果集的第二条记录,既遗失了第一条记录(因为之前已经指向了第一条记录,继续while(rs.next())时是指向了第二条记录)。继续说,取出第一条记录之后,然后再以上面while循环体的方式取出剩下的记录(如果确实还有记录的话,如果没有记录了,循环体不执行,也不会影响效果)。
    水平尚浅,一点不成熟的看法,大家多加批评指正。