JDBC пустая проверка набора результатов не работает - PullRequest
0 голосов
/ 15 мая 2011

В следующем Java-классе у меня есть метод authenticate, в котором я использую resultSet.next() метод, чтобы проверить, существуют ли заданные имя пользователя и пароль в базе данных или нет, но он возвращает false, даже когдаимя пользователя и пароль существуют в базе данных.

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 ]

2 голосов
/ 15 мая 2011

В зависимости от вашей базовой СУБД у вас могут возникнуть проблемы с именем пользователя и паролем.

Для большинства СУБД MySecretPassword - это значение, отличное от mysecretpassword.

Таким образом, если ваша СУБД чувствительна к регистру и пользователь не ввел имя пользователя и пароль точно то же самое, что хранится в базе данных, очень вероятно, что SELECT ничего не возвращает.

0 голосов
/ 15 мая 2011

В комментариях к ОП вы говорите: «У меня есть следующие значения в БД. UserName: usman, password: 2», но ваш код говорит, что поле имени пользователя называется «user_name».

имя_пользователя! = имя_пользователя

0 голосов
/ 15 мая 2011

Попробуйте следующий код:

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();
      }
    }
}
...