基于mysql条件在javafx app中打开不同的GUI

时间:2017-10-11 12:32:50

标签: java mysql javafx

我正在编写一个模拟Android设备商店的javafx应用程序。

如果用户输入正确的密码和用户名,我希望根据mysql数据库表中"IsAdmin"列的内容打开不同的窗口。

"IsAdmin"列的内容是布尔值。

这是方法的代码:

@FXML
private Button LoginButton;

@FXML
private TextField UserField;

@FXML
private PasswordField PassField;

@FXML
private Label ManagerLoginLabel;

@FXML
private Label StatusLabel;

@FXML
private Button RegisterButton;

@FXML
public void Login() {
    LoginButton.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
            PreparedStatement ps;
            try {
                Connection connection = DbUtil.getInstance().getConnection();
                ps = connection.prepareStatement("SELECT `Username`, `Password`, `IsAdmin` FROM `androidshop`.`userdatabase` WHERE `username` = ? AND `password` = ?");
                ps.setString(1, UserField.getText());
                ps.setString(2, String.valueOf(PassField.getText()));
                ResultSet result = ps.executeQuery();
                if (result.next() ****) {
                    StatusLabel.setText("Welcome, shop manager!");
                    try {
                        Parent parent;
                        parent = FXMLLoader.load(getClass().getClassLoader().getResource("view/ManagerPane.fxml"));
                        Stage stage = new Stage();
                        stage.setTitle("ManagerPane");
                        stage.setScene(new Scene(parent, 450, 450));
                        stage.show();
                        ((Node)(event.getSource())).getScene().getWindow().hide();
                    }
                        catch (IOException e) {
                            e.printStackTrace();
                             } else if (result.next() ****){
                            Parent parent;
                            StatusLabel.setText("Welcome, honored customer!");
                            parent = FXMLLoader.load(getClass().getClassLoader().getResource("view/ClientPane.fxml"));
                            Stage stage = new Stage();
                            stage.setTitle("ClientPane");
                            stage.setScene(new Scene(parent, 450, 450));
                            stage.show();
                            ((Node)(event.getSource())).getScene().getWindow().hide();

                        }
                     else {
                        StatusLabel.setText("Wrong Password/Username, please try again");
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

我不知道如何在考虑"IsAdmin"字段时写出正确的条件,而且我无法在线找到任何内容。

我在方法中标记了空格,我希望将这些条件设为"****"

这些条件应该如何?或者是否有更好的方法来实现这一结果?

我将非常感谢任何答案或提示如何改进我的代码。

感谢您的时间。

1 个答案:

答案 0 :(得分:-1)

基本上,我更喜欢用表格来表达条件&#34; userid&#34;其中包含:

  • 用户名
  • 密码
  • 状态(可能包含admin,endUser等)

所以在java代码中将是:

public void Login() {
    LoginButton.setOnAction(new EventHandler<ActionEvent>() {
        @Override
    public void handle(ActionEvent event) {
        PreparedStatement ps;
        try {
            Connection connection = DbUtil.getInstance().getConnection();
            String sql = "SELECT username, password, status FROM userid WHERE username = ? AND password = ?";
            ps = connection.prepareStatement(sql);
            ps.setString(1, UserField.getText());
            ps.setString(2, String.valueOf(PassField.getText()));
            ResultSet result = ps.executeQuery();
            if (result.next()) {
                String status = result.getString("status");
                if(status == "admin"){
                    StatusLabel.setText("Welcome, shop manager!");
                    try {
                        Parent parent;
                        parent = FXMLLoader.load(getClass().getClassLoader().getResource("view/ManagerPane.fxml"));
                        Stage stage = new Stage();
                        stage.setTitle("ManagerPane");
                        stage.setScene(new Scene(parent, 450, 450));
                        stage.show();
                        ((Node)(event.getSource())).getScene().getWindow().hide();
                    }
                    catch (IOException e) {
                        e.printStackTrace();
                    }
                }else{
                    try {
                        Parent parent;
                        StatusLabel.setText("Welcome, honored customer!");
                        parent = FXMLLoader.load(getClass().getClassLoader().getResource("view/ClientPane.fxml"));
                        Stage stage = new Stage();
                        stage.setTitle("ClientPane");
                        stage.setScene(new Scene(parent, 450, 450));
                        stage.show();
                        ((Node)(event.getSource())).getScene().getWindow().hide();
                    } catch (Exception e) {
                        System.out.println("Failed to Show Stage "+ e);
                    }
                }                     
            }                
        }catch (SQLException e) {
            StatusLabel.setText("Wrong Password/Username, please try again");
        }
    });
    }
}

这将完美地运作,因为通过将列标签赋予&#34; IsAdmin&#34;来获得条件的方式太糟糕了,没有效果。

String status = result.getString("status"); 

上面的代码将在admin列中查找值,条件为:

if(status == "admin"){

}

如果字符串状态包含字符串&#34; admin&#34;则

将采用该条件,然后它将打开管理页面,否则它将转到客户端页面。

注意:最好是创建一个单独的方法来调用fxml文件,并在需要时调用它。只需给出参数String fxmlFile,它将定义将在舞台上设置的FXML文件。