如何判断ResultSet集合是否为空? 如何判断ResultSet集合是否为空? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 if(rs.next())//trueelse//false next()游标下移,如无结果false if(rs==null){}else{}, 老兄,你有没有试过,想当然。这样是没用的。 if(rs.next())//trueelse//falseif(rs==null){}else{} 别误导人 你可以做一个试验,如果要从rs里拿第一个值,必须先用rs.next()。实际上next拿到的就是当前位置的值 rs.wasNull();//返回boolean值这个你有没有试用过,要实事求是去考虑问题. snow_jin(晓灯(172):你说的是没错,但如果用了rs.next()那游标相应的就移动了.如果我想再做rs.next()去的数据就不是第一条记录了. rs刚打开是指针是指在第一条记录之前的,就是beforeFirstif(rs.next()){ //如果rs不为空,则指向第一条记录}else{ //rs为空} 可以用rs.first()来调整游标。再者。用while(rs.next())的目的就是取数据。 什么指来指去!你以为是点兵点将阿!结果集初始化时指针是指在第一条前的,你要去其中的数据就要逐条遍历一遍阿,当然要往下移了,如果是空那么rs.next就返回false了,那知道你想知道的啦。“指来指去”你真逗! if(rs.next())//trueelse//false ------------------------那指回前一条,这样指来指去,是不是不完美?------------------------ 什么时候指来指去了? 如果rs是空的话,就退出IF语句了; 如果不是空的,就继续执行。 我不是要去取其中的数据,我只是想判断一下那个resultset是否为空. jim1516(网无忌) :如果那不为空呢.我要去取数据,这回你的游标(指针)已经指向到了第一条记录了.如果你还用rs.next()那指针就指向了第二条数据了.第一条也就丢失了.如果要把所有的记录取出.用你的方法,必须往回指. 呵呵 你没用rs.next();的话 你的结果集怎么判断都是空的 ^_^ 你用rs.next();判断以后 要取得话你就直接取了 干吗还要用rs.next() 如果要取第二条 你就直接用rs.next()移动一下游标不就是了嘛 也可以用循环啊比如while(rs.next()){ 将所有的记录放入一个数组里}到时你想取那条就取哪条 1。如果你想知道数据集合里数目而不是要取返回的记录,应该执行select count的查询select count(column_name) from table_name;2。如果你要取得其中的各条记录,应该使用next()的方法来判断[if/while](rs!=null&&rs.next()){}上面两种做法并没有冲突,你要判断ResultSet集合非空与否,无非就是想知道这个查询会返回多少记录和取得这些数据 int count = 0;while(rs.next()){...count++;}...处理如果有数据然后判断count是否为0 呵呵,I 服了 YOU!想问一下,你试过了吗? 看你怎么想了如果你只想判断一下rs是否为空,那么if(rs.next){}即使是往下移动了,你要的也不是结果集,也没关系,如果你想不为空的时候做点什么,那么就while(rs.next){}了所以,我感觉,在这个问题上,判断rs当前指向哪条纪录,不是很有意义 如果rs为空,rs.next()就已经报错了。应该先判断rs是否为空,用if(rs == null){}else{}是对的。再while(rs.next()){}取每一条记录就行了。 补充:rs为空与空记录集不一样的。rs为空指rs==null。空记录集指rs的count 为0。如果要判断是否有记录,用while(rs.netxt()){},count为0时会不执行while循环中的内容。 但如果用了rs.next()那游标相应的就移动了.如果我想再做rs.next()去的数据就不是第一条记录了.--------一条记录取到了,不就可以了吗?为什么取了一次还要取一次??数据取出来之后,放到程序的变量里,你想用多少次都可以啊,干吗一定要到数据库里再取一次??数据库的访问能避免的尽量避免,经常访问数据库,效率也不高啊 if(rs==null)if(rs.hasNext())if(rs.next()==false) if(!rs.next()) out.print("数据库为空");else out.print("数据库不为空"); if(!rs.next()) out.print("数据库为空");else { out.print("数据库不为空"); do { String name = rs.getString(1);//因为已经next过了,所以已经可以直接取得了 } while(rs.next());}这样就可以一次搞掂啦 ChDw(米) 能满足楼主的要求,有许多人回答的都没明白楼主的意思。不过我想这样的结果还是不完全楼主的意愿,但是没有办法,好像只能这样。 snow_jin(晓灯(172):你说的是没错,但如果用了rs.next()那游标相应的就移动了.如果我想再做rs.next()去的数据就不是第一条记录了.-----------------------废话,不移动不能判断的如果你还要第一条纪录的话,自己另外想别的办法你也可以重新执行一次,再生成一个记录集 楼主的意思不就是需要判断是否为空,如果不为空就取得各行的数据我上面的代码没有问题吧,应该是比较理想的啦。另外,根本就不必要再生成一个ResultSet,这样的操作多浪费时间 还是Delphi中的DataSet好: DataSet.IsEmpty; 严重同意ChDw(米)的说法,楼主是否从C/C++转java啊,对java的ResultSet用法不习惯把,我也经过这样的不适应。其实java的ResultSet得到结果集后,游标是放在第一条记录之前,这时候直接取数据是取不到的。必须经过一次next后才移动到第一条记录。这与C/C++的情况不同。用下面的语句可以rs =stm.executeQuery(".....");while(rs.next()) { rs.getXXXX(....);}上面的语句可以取出所有的结果,如果结果为空,不会执行while里面的语句 To ChDw(米) if(!rs.next()) ///////////////如果rs是空,现在是不是就出错了。都空了,还怎么next()? out.print("数据库为空");else { out.print("数据库不为空"); do { String name = rs.getString(1);//因为已经next过了,所以已经可以直接取得了 } while(rs.next());} if(rs.next()) out.println("Good!!!"); else out.println("Bad!!!"); 除非出现异常了,否则rs根本不可能为空!!!!!!!!!!!!!!!!!!!!!!!如果你的Select没有返回数据,rs仍然是一个ResultSet对象,仅仅是在第一次调用next方法时候返回false next()的定义:boolean next() next()本来指向数据库第一条记录的前面,调用rs.next()将指针指向第一条记录,如果数据库为空,那么next()将查不到第一条记录,直接返回false,查到了ok 执行else 无记录的话不会抛异常的,只会返回false 看样子很多人都没实际开发过嘛,居然好几个人都说用if(rs==null)笑死我了啊.呵呵........... 很老的帖子了,遇到相同问题才搜出来的,我今天在用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循环体的方式取出剩下的记录(如果确实还有记录的话,如果没有记录了,循环体不执行,也不会影响效果)。水平尚浅,一点不成熟的看法,大家多加批评指正。 求教java聊天工具服务器怎么转发数据 J2SE5新特性,范型与泛型的区别? 求一个javamail发邮件的例子 关于反射 java有没有类似sniffer的网络抓包工具? 关于Java查询DB2数据库数据时出的问题???? 初学java,提个弱弱的问题 在JAVA中如何求三角函数? 江湖救急:谁能帮我解释一下这个函数? 在线等待解决技术难题:如何知道启动的应用程序结束? Jsp中如何捕获IE的关闭事件? 八个J2EE的高级群,按层次划分,共享教程代码,期待各位朋友加入(需考试)
//true
else
//false
老兄,你有没有试过,想当然。这样是没用的。
//true
else
//false
if(rs==null){}else{} 别误导人
实际上next拿到的就是当前位置的值
这个你有没有试用过,要实事求是去考虑问题.
如果我想再做rs.next()去的数据就不是第一条记录了.
if(rs.next())
{
//如果rs不为空,则指向第一条记录
}
else
{
//rs为空
}
再者。用while(rs.next())的目的就是取数据。
结果集初始化时指针是指在第一条前的,你要去其中的数据就要逐条遍历一遍阿,当然要往下移了,如果是空那么rs.next就返回false了,那知道你想知道的啦。
“指来指去”你真逗!
//true
else
//false
那指回前一条,这样指来指去,是不是不完美?
------------------------ 什么时候指来指去了?
如果rs是空的话,就退出IF语句了;
如果不是空的,就继续执行。
如果你还用rs.next()那指针就指向了第二条数据了.第一条也就丢失了.如果要把所有的记录取出.用
你的方法,必须往回指.
如果要取第二条 你就直接用rs.next()移动一下游标不就是了嘛
比如
while(rs.next())
{
将所有的记录放入一个数组里
}
到时你想取那条就取哪条
select count(column_name) from table_name;2。如果你要取得其中的各条记录,应该使用next()的方法来判断
[if/while](rs!=null&&rs.next()){
}上面两种做法并没有冲突,你要判断ResultSet集合非空与否,无非就是想知道这个查询会返回多少记录和取得这些数据
while(rs.next()){
...
count++;
}
...处理如果有数据
然后判断count是否为0
应该先判断rs是否为空,用if(rs == null){}else{}是对的。
再while(rs.next()){}
取每一条记录就行了。
rs为空指rs==null。
空记录集指rs的count 为0。
如果要判断是否有记录,
用while(rs.netxt()){},count为0时会不执行while循环中的内容。
如果我想再做rs.next()去的数据就不是第一条记录了.
--------一条记录取到了,不就可以了吗?为什么取了一次还要取一次??
数据取出来之后,放到程序的变量里,你想用多少次都可以啊,干吗一定要到数据库里再取一次??数据库的访问能避免的尽量避免,经常访问数据库,效率也不高啊
if(rs.hasNext())
if(rs.next()==false)
out.print("数据库为空");
else
out.print("数据库不为空");
out.print("数据库为空");
else {
out.print("数据库不为空");
do {
String name = rs.getString(1);//因为已经next过了,所以已经可以直接取得了
} while(rs.next());
}这样就可以一次搞掂啦
有许多人回答的都没明白楼主的意思。不过我想这样的结果还是不完全楼主的意愿,
但是没有办法,
好像只能这样。
如果我想再做rs.next()去的数据就不是第一条记录了.-----------------------废话,不移动不能判断的
如果你还要第一条纪录的话,自己另外想别的办法
你也可以重新执行一次,再生成一个记录集
另外,根本就不必要再生成一个ResultSet,这样的操作多浪费时间
while(rs.next()) {
rs.getXXXX(....);
}上面的语句可以取出所有的结果,如果结果为空,不会执行while里面的语句
///////////////如果rs是空,现在是不是就出错了。都空了,还怎么next()?
out.print("数据库为空");
else {
out.print("数据库不为空");
do {
String name = rs.getString(1);//因为已经next过了,所以已经可以直接取得了
} while(rs.next());
}
out.println("Good!!!");
else
out.println("Bad!!!");
if(rs==null)
笑死我了啊.呵呵...........
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循环体的方式取出剩下的记录(如果确实还有记录的话,如果没有记录了,循环体不执行,也不会影响效果)。
水平尚浅,一点不成熟的看法,大家多加批评指正。