jdbc空结果集检查不起作用

时间:2011-05-15 11:57:39

标签: java jdbc resultset

在下面的java类中,我正在使用一个方法进行身份验证,其中我使用resultSet.next()方法来检查数据库中是否存在给定的userName和密码,但它甚至返回false当给定的userName和密码存在于数据库中时。

public boolean authenticate(String userName,String password){
//db connection code
    try {
      String query = "select user_name from registeredUser where user_name= ? AND password = ?";
      pstmt = conn.prepareStatement(query); 
          pstmt.setString(1, userName);
      pstmt.setString(2, password);
      rs = pstmt.executeQuery();
      if(rs.next()) {  
            System.out.println("True");
                return true;
          }  
      else return false;
    } catch (Exception e) {
        e.printStackTrace();
        return False;
    } finally {
      try {
        rs.close();
        pstmt.close();
        conn.close();
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
}

3 个答案:

答案 0 :(得分:2)

根据您的基础DBMS,您可能会遇到用户名和密码问题。

对于大多数DBMS,MySecretPassword的值不同于mysecretpassword

因此,如果您的DBMS 区分大小写并且用户未输入用户名和密码完全,则存储在数据库中的用户名和密码很可能是SELECT什么都不返回。

答案 1 :(得分:0)

尝试下一个代码:

public boolean authenticate(String userName,String password){
//db connection code
    try {
      String query = "select count(*) from registeredUser where user_name= ? AND password = ?";
      pstmt = conn.prepareStatement(query); 
          pstmt.setString(1, userName);
      pstmt.setString(2, password);
      rs = pstmt.executeQuery();
      rs.next();
      int count = rs.getInt(1);
      if(count != 0) {  
            System.out.println("True");
                return true;
          }  
      else return false;
    } catch (Exception e) {
        e.printStackTrace();
        return False;
    } finally {
      try {
        rs.close();
        pstmt.close();
        conn.close();
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
}

答案 2 :(得分:0)

在对OP的评论中,您说“我在db。userName中有以下值:usman,密码:2”但您的代码说用户名字段名为“user_name”。

userName!= user_name