2016-12-06 2 views
0

Этот код должен показывать сообщение об ошибке после нажатия кнопки. Что делает buttonclick, это проверить, соответствуют ли имя пользователя и пароль имени пользователя и паролю в базе данных.Показать предупреждение, если ничего не найдено из ResultSet в JavaFX

IF true, это покажет следующую сцену. если false, я хочу показать эту ошибку, которую я сделал. Отображение следующей сцены отлично работает, показывая, что ошибка не работает.

Это мой код:

public Pane createLogin() throws SQLException { 
    GridPane gridPane = new GridPane(); 
    gridPane.setHgap(10); 
    gridPane.setVgap(10); 
    gridPane.setPadding(new Insets(20, 150, 10, 10)); 

    Button login = new Button("Login!"); 
    TextField usernameField = new TextField(); 
    usernameField.setPromptText("Username"); 
    PasswordField passwordField = new PasswordField(); 
    passwordField.setPromptText("Password"); 
    Alert alert = new Alert(Alert.AlertType.ERROR); 
    alert.setTitle("ERROR"); 
    alert.setHeaderText("OH SNAP"); 
    alert.setContentText("I have a great message for you!"); 

    login.setOnAction(new EventHandler<ActionEvent>() { 

     @Override 
     public void handle(ActionEvent event) { 

      String username = usernameField.getText(); 
      String password = passwordField.getText(); 
      String query = "Select * from user WHERE username ='" + username + "' and password ='" + password + "'"; 
      ResultSet rs = null; 
      System.out.println("hahah:" + username); 
      try { 
       rs = dataBase.executeQuery(query); 
       dataBase.executeDataRowQuery(query); 
       while (rs.next()) { 
        if (username.equals(rs.getString("username"))) { 
         if (password.equals(rs.getString("password"))) { 
          switchScreen(createOverview()); 
         } else{ 
          alert.showAndWait(); 
         } 
        } else{ 
         alert.showAndWait(); 
        } 
        alert.showAndWait(); 
       } 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 


     } 
    }); 
    gridPane.add(new Label("Username: "), 0, 0); 
    gridPane.add(usernameField, 0, 1); 
    gridPane.add(new Label("Password: "), 1, 0); 
    gridPane.add(passwordField, 1, 1); 

    gridPane.add(new Label("Login!"), 2, 0); 
    gridPane.add(login, 2, 1); 

    return gridPane; 
} 
+2

[Little bobby tables] (http://bobby-tables.com/) был бы настолько горд. Если нет записи, вы не вводите это время, потому что rs.next() возвращает false! –

ответ

0

Удалите оповещения из кода, как у вас есть. Создайте статический метод. Поместите свой полный код предупреждения там. Вызовите новый статический метод, в котором у вас есть alert.showandwait();

+0

Просто дополнительный бонус. Я знаю, что вы можете сделать лучше, чем с этим утверждением if. например if (this && that) {} else {} – Sedrick

+0

Что узнать больше об защищенных входах? Это было очень полезно для меня. https://www.javacodegeeks.com/2012/05/secure-password-storage-donts-dos-and.html – Sedrick

1

С ResultSet.next возвращается, если существует несколько строк, вы можете просто сделать

if (rs.next()) { 
    switchScreen(createOverview()); 
} else { 
    alert.showAndWait(); 
} 

или в качестве альтернативы использовать SELECT COUNT(*) FROM ... и проверьте первый столбец в первом ряду:

if (rs.next() && rs.getInt(1) > 0) 
    ... 

Примечание: I не будет разрабатывать SQL-инъекции или другие серьезные проблемы с безопасностью, такие как чтение пароля и имя пользователя ...

Смежные вопросы