昨天做了一个登录验证的例子,但是很奇怪,明明有数据但是却读不出来,不知道是什么原因?String sql = "select * from userinfo where loginname = ?";

dbConnection = ConnectionManager.getConnection();
pStatement = dbConnection.prepareStatement(sql);
pStatement.setString(1, user);
res = pStatement.executeQuery();

                        if(res.next()&& res.getString("password").equals(pass))  
                        {
     return true;
}
按照上面的方式,res.next()返回ture表示有记录,但是res.getString("password")却引发异常,说res没有当前行。后来只有改成下面这种方式,运行成功.这个时候就又可以使用res.getString("password")了: String sql = "select * from userinfo where loginname = ? and password = ?";
dbConnection = ConnectionManager.getConnection();
pStatement = dbConnection.prepareStatement(sql);
pStatement.setString(1, user);
pStatement.setString(2, pass);

res = pStatement.executeQuery();
if(res.next())
{
                                String s = res.getString("password");
return true;
}

解决方案 »

  1.   

      if(res.next()&& res.getString("password").equals(pass))  
    这种写法是很不正规得!你想象下,你没有res.next()得限制就去取出
    res.getString("password")那么res.getString("password")取出值是什么?
      

  2.   

    你的意思是不是应该这样写?
    if(res.next())
    {
        if(res.getString("password").equals(pass))         
        {
            return true;
        }
    }
      

  3.   

    res.next()是用来定位某一条记录的,只有定位到该条记录,才可以去得到该条记录相应的字段。