我正在编写一个模拟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"
字段时写出正确的条件,而且我无法在线找到任何内容。
我在方法中标记了空格,我希望将这些条件设为"****"
。
这些条件应该如何?或者是否有更好的方法来实现这一结果?
我将非常感谢任何答案或提示如何改进我的代码。
感谢您的时间。
答案 0 :(得分:-1)
所以在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文件。