做一个登录的页面,数据库中的登录者不存在,可是返回的是一个非null的用户类。我的用户类中有部分字段类型是int型的,在数据库中查找不存在用户时会默认给int型字段赋值0,如何解决此类问题?难道非要在查找方法中去判断每个字段吗?
/**
 * 根据用户名查找用户信息
 */
public User findUserByName(String userName)
{
User user=new User();
con=getConnection();
try {
pstmt=con.prepareStatement("select * from TBL_USER where userName=?");
pstmt.setString(1, userName);
rs=pstmt.executeQuery();
if(rs!=null)
{
while(rs.next())
{
user.setUId(rs.getInt(1));
user.setUserName(rs.getString(2));
user.setUserPass(rs.getString(3));
user.setStatusId(rs.getInt(4));
}
}
} catch (SQLException e) {
e.printStackTrace();
}
finally
{
closeAll();
}
return user;
}
请高手指点,在线等,谢谢!

解决方案 »

  1.   

    在数据库中查找不存在用户时会默认给int型字段赋值0你要确定了,到底是操作数据库的返回值 还是“构造类的时候给隐式初始化0了,int初始化是0,” 
      

  2.   

    还有。楼主的代码有逻辑错误一、 while(rs.next()) 前又有 if(rs!=null) ,没有必要。二、while(rs.next()) 是否循环、当数据库有二个或者二个以上同名用户时候。你写的该方法public User findUserByName(String userName) 返回值是最后一次拿出来的用户信息。。更正此方法
    User user=new User(); 放至while(rs.next())循环体的第一部分。那方法的返回值应该是个容器类型了。
      

  3.   

    用户名是唯一的吗? 如果是的话,rs.next()应该是没有问题的。
    没有用户时返回user非null,应该是你 User user=new User(); 这里new了。
      

  4.   

    建议楼主看下自己用的数据库有没有int 为空时是否取出0这个性质
      

  5.   

    如你所说,已经解决,User user=new User()是生成了一个对象,所以无论如何也不会为null,已经做了改进为
    /**
     * 根据用户名查找用户信息
     */
    public User findUserByName(String userName)
    {
    User user=null;
    con=getConnection();
    try {
    pstmt=con.prepareStatement("select * from TBL_USER where userName=?");
    pstmt.setString(1, userName);
    rs=pstmt.executeQuery();
    while(rs.next())
    {
    user=new User();
    user.setUId(rs.getInt(1));
    user.setUserName(rs.getString(2));
    user.setUserPass(rs.getString(3));
    user.setStatusId(rs.getInt(4));
    }
    } catch (SQLException e) {
    e.printStackTrace();
    }
    finally
    {
    closeAll();
    }
    return user;
    }