Как получить соответствующий этап в соответствии с типом пользователя?

#java #sqlite #javafx #scenebuilder

#java #sqlite #javafx #scenebuilder

Вопрос:

Итак, проблема сейчас в том, что у меня проблема с подсказкой правильного этапа для каждого типа пользователей, у меня есть метод, который проверяет их имя пользователя и возвращает их тип роли, и после этого он предложит его на соответствующий этап после проверки их пользователя и прохождения.

Я попытался выполнить некоторую отладку, и кажется, что в методе getUserRole что-то не так, поскольку я не могу войти в метод для него в контроллере входа.

** Контроллер входа в систему*

 @FXML
    public void Login(ActionEvent event) {
        try {
            if (this.loginModel.isLogin(this.username.getText(), this.password.getText())) {
                Stage stage = (Stage) this.login.getScene().getWindow();
                stage.close();

                if (this.loginModel.getUserRole(this.username.getText()) == 5) {
                    adminLogin();
                } else if (this.loginModel.getUserRole(this.username.getText()) == 4) {
                    technicianLogin();
                } else if (this.loginModel.getUserRole(this.username.getText()) == 3) {
                    custServiceLogin();
                } else if (this.loginModel.getUserRole(this.username.getText()) == 3) {
                    financeLogin();
                } else if (this.loginModel.getUserRole(this.username.getText()) == 3) {
                    managementLogin();
                } else {
                    this.loginStatus.setText("The username or password entered is incorrect. Please check and try again.");
                }

            }
        } catch (Exception localException) {
            this.loginStatus.setText("The username or password entered is incorrect. Please check and try again.");
        }
    }
 

Получить метод UserRole

 public int getUserRole(String user) throws Exception
    {
     PreparedStatement pr = null;
     ResultSet rs = null;

     String sql = "SELECT * FROM Login WHERE username = ? AND role = ?";
     try
     {
         pr = this.connection.prepareStatement(sql);
         pr.setString(1, user);


         if(rs.next())//cant initialized this if statement
         {
             int role = rs.getInt("role");
             return role;
         }
         else{
             return 0;
         }
     }
     catch(SQLException ex)
     {
         return 0;
     }

     finally
     {
     pr.close();
     rs.close();
     }


    }
 

Комментарии:

1. В запросе есть 2 заполнителя, но вы задаете только один. Таким образом, вы ВСЕГДА будете получать исключение при вызове pr.executeQuery() . Вероятно, изменение запроса устранило бы проблему: String sql = "SELECT role FROM Login WHERE username = ?"; (Я почти уверен, что это дубликат, поэтому я не публикую это как ответ.) Кстати: я рекомендую сохранить результат запроса / использовать a switch вместо запроса к БД до 3 раз (или 5 раз, если вы проверяете 5 разных значений).

2. получаете ли вы исключение или ваш отладчик не останавливается на определенной точке останова, которую вы ожидаете? — Ваш вопрос позволяет мне думать, что это может быть: ваша loginmodel не инициализирована

3. Включает ли этот проект Swing в себя ? JFrame Правильна ли здесь формулировка?

4. jframe, я использовал javafx для этого, его в теге, @sedrick

5. хорошо, так что я использовал stage вместо этого, было бы лучшим словом javafx , поскольку я использую scenebuilder графический интерфейс? @Sedrick

Ответ №1:

Я нашел решение, кажется, что я забыл выполнить запрос, после его добавления в блок try, похоже, он работает.

 rs.executeQuery();