关于rs.next()问题

rs.next(); -- 从查询出来的集合中拿出了一条数据

表示的集合表中的第一个对象。

如果说你在做数据库查询的时候,返回了一个Result结果集。只有一条数据是,常常很容易犯了这样的错误。

先对数据进行判断。

数据库中的数据:

 

这里有两条数据

//查询一条用户信息
	public User select(User t) {
		int in = 0;
		sql = "select * from blog_users where blogstate=? ";
		conn = DBconn.getConnection();
		try {
			ps = conn.prepareStatement(sql);
			System.out.println(t);
			ps.setInt(1, in);
			rs = ps.executeQuery();
//			if(rs.next()){//在这里进行判断集合中是否有数据存在...其实这里集合已经拿到集合中的第一条数据
			User user =null;
				while(rs.next()){//这里已经是第二条
					System.out.println(rs.getString("username"));
					user = new User();
					user.setUserid(rs.getInt("userid"));
					user.setUsername(rs.getString("username"));
					user.setPassword(rs.getString("password"));
					user.setEmail(rs.getString("email"));
					user.setNickname(rs.getString("nickname"));
					user.setBlogstate(rs.getInt("blogstate"));
					user.setUserstate(rs.getInt("userstate"));
					System.out.println("用户对象:"+user);	
				}
			return user;
//			}
		} catch (SQLException e) {
			System.out.println("查询用户"+t.getUsername()+"可能不存在!");
			e.printStackTrace();
		}finally{
//			DBconn.close(rs, stm, ps);
		}
		System.out.println("该对象不存在"+in);
		return null;
	}


User [blogstate=0, email=null, nickname=null, password=null, userid=0, username=abc123456, userstate=0]
abc123456
用户对象:User [blogstate=0, email=123456@qq.com, nickname=灵嗅, password=aaaa, userid=1, username=abc123456, userstate=1]
cde4567
用户对象:User [blogstate=0, email=4567@qq.com, nickname=空灵, password=bbbb, userid=2, username=cde4567, userstate=1]

很多时候,我们都会有一个习惯先去判断下;

因为rs.next()返回的是true 和false 如果集合中有数据返回的就是true

判断完成我们再去遍历

这样数据就会少点。从第二条数据开始遍历。当然,如果你当前查询的只是一条数据的话。那你遍历的结果始终都是null。

所以千万不要做这样的判断。我可能是之前对这个认识的不够,所以才犯了这样一个错误。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值