【问题标题】:How to get the respective stage according to the user type?如何根据用户类型获取各自的阶段?
【发布时间】:2019-09-08 19:12:26
【问题描述】:

所以现在的问题是我在为每种类型的用户提示到正确的阶段时遇到问题,我有一个方法可以检查他们的用户名并返回他们的角色类型,然后它将提示到他们各自的阶段在验证他们的用户并通过之后。

我尝试进行一些调试,但似乎 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.");
        }
    }

获取用户角色方法

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


    }

【问题讨论】:

  • 查询中有2个占位符,但你只设置了一个。这样你在调用pr.executeQuery() 时总是会遇到异常。查询的更改可能会解决问题:String sql = "SELECT role FROM Login WHERE username = ?";(我很确定这是重复的,这就是为什么我不将其发布为答案。)顺便说一句:我建议存储查询的结果/使用switch 而不是最多查询数据库 3 次(或 5 次,如果您检查 5 个不同的值)。
  • 您是否遇到异常,或者您的调试器没有在您期望的某个断点处停止? - 你的问题让我觉得可能是:你的登录模型没有初始化
  • 这个项目是否包含SwingJFrame 这里的措辞正确吗?
  • jframe,我用 javafx 做这个,它在标签里,@sedrick
  • 好吧,所以我使用stage 来代替javafx 会更好,因为我使用scenebuilder 来做GUI? @Sedrick

标签: java sqlite javafx scenebuilder


【解决方案1】:

我找到了一个解决方案,似乎我忘记执行查询了,在将其添加到 try 块后,它似乎有工作了。

rs.executeQuery();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多