永发信息网

连接数据库查询记录集是否为空,为什么老是不为空

答案:2  悬赏:10  手机版
解决时间 2021-02-15 02:30
  • 提问者网友:我的未来我做主
  • 2021-02-14 18:50
文件check.java的部分代码为
Connection cnn = null;
PreparedStatement ps = null;
ResultSet rs = null;
boolean flag = false;
try {
cnn = DataBase.getConn();
ps = cnn.prepareStatement(
"select * from user where uid=?");
ps.setString(1, user.getUid());
rs = ps.executeQuery();
if (rs != null) {
flag =true; rs.close();ps.close();
}
else{
flag=false;}

}
catch (Exception es) {
throw es;
}
finally {
cnn.close();
}
return flag;
这个函数传回的总是true,无论uid传过来的值是什么,函数传回的值都是true,不明白为什么老说我记录集都不为空,希望大家解决下,谢谢
最佳答案
  • 五星知识达人网友:毛毛
  • 2021-02-14 18:56
Connection cnn = null;
PreparedStatement ps = null;
ResultSet rs = null;
boolean flag = false;
try {
cnn = DataBase.getConn();
ps = cnn.prepareStatement("select * from user where uid=?");
ps.setString(1, user.getUid());
rs = ps.executeQuery();
if (rs != null) { //老大,你这里错啦,rs这个对象始终不会为空一啊! ps.executeQuery()这个方法返回一个记录集ResultSet对象,
//不管此次搜索有没产生记录集,都回返回ResultSet的一个实例,所以你的flag=true不管什么情况下都会执行了,
//只是这个实例中的数据记录集是否为空是要我们程序判断,但是不是 rs 与null比较的
//而是用ResultSet的next()方法检测,next()作用是把当前记录集指针移到下一条记录集上(开始的时候是指向第一条记录集之前的)
//next方法返回true或者false ,当没下一条记录的时候返回false,否则就返回true了
//####所以把if (rs != null) 改为:if (rs.next())就可以了############################
flag =true;
rs.close();
ps.close();
}
else{
flag=false;}

} catch (Exception es) {
throw es;
}
finally {
cnn.close();
}
return flag;
全部回答
  • 1楼网友:想偏头吻你
  • 2021-02-14 20:10
呵呵 楼上的说对了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯