基于mysql条件在javafx应用中打开不同的GUI
我正在编写一个模拟android设备商店的javafx应用程序 如果用户输入了正确的密码和用户名,我希望这个特定的方法能够根据mysql数据库表中基于mysql条件在javafx应用中打开不同的GUI,java,mysql,javafx,Java,Mysql,Javafx,我正在编写一个模拟android设备商店的javafx应用程序 如果用户输入了正确的密码和用户名,我希望这个特定的方法能够根据mysql数据库表中“IsAdmin”列的内容打开一个不同的窗口 “IsAdmin”列的内容是布尔值 以下是该方法的代码: @FXML private Button LoginButton; @FXML private TextField UserField; @FXML private PasswordField PassField; @FXML private
“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();
}
}
});
}
}
@FXML
私人按钮登录按钮;
@FXML
私有文本字段用户字段;
@FXML
私有密码字段PassField;
@FXML
私有标签管理器登录标签;
@FXML
自有品牌;
@FXML
专用按钮寄存器按钮;
@FXML
公共无效登录(){
setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
编制报表;
试一试{
Connection Connection=DbUtil.getInstance().getConnection();
ps=connection.prepareStatement(“从`androidshop`.`userdatabase`中选择`Username`、`Password`、`IsAdmin`,其中`Username`=?和`Password`=?”;
ps.setString(1,UserField.getText());
ps.setString(2,String.valueOf(PassField.getText());
结果集结果=ps.executeQuery();
if(result.next()***){
StatusLabel.setText(“欢迎光临,商店经理!”);
试一试{
父母;
parent=FXMLLoader.load(getClass().getClassLoader().getResource(“view/ManagerPane.fxml”);
阶段=新阶段();
舞台设置标题(“经理板”);
舞台场景(新场景(家长,450450));
stage.show();
((节点)(event.getSource()).getScene().getWindow().hide();
}
捕获(IOE异常){
e、 printStackTrace();
}else if(result.next()***){
父母;
StatusLabel.setText(“欢迎您,尊敬的客户!”);
parent=FXMLLoader.load(getClass().getClassLoader().getResource(“view/ClientPane.fxml”);
阶段=新阶段();
stage.setTitle(“客户端窗格”);
舞台场景(新场景(家长,450450));
stage.show();
((节点)(event.getSource()).getScene().getWindow().hide();
}
否则{
StatusLabel.setText(“错误的密码/用户名,请重试”);
}
}捕获(SQLE异常){
e、 printStackTrace();
}
}
});
}
}
考虑到“IsAdmin”
字段,我不知道应该如何编写正确的条件,并且我无法在网上找到任何内容
我在方法中用“****”
标记了我想要放置这些条件的空格
这些情况应该是什么样子?还是有更好的方法来实现这个结果
我将非常感谢任何关于如何改进我的代码的答案或提示
谢谢您的时间。基本上,我更喜欢使用一个表来创建一个条件,比如说“userid”,它包含:
- 用户名
- 密码
- 状态(可能包含管理员、最终用户或其他内容)
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");
}
});
}
}
上面的代码将在admin列中查找值和条件:
if(status == "admin"){
}
如果字符串状态包含字符串“admin”,则它将打开admin页,否则将转到客户端页
注意:最好创建一个单独的方法来调用fxml文件,并在需要时调用它。只需给出参数字符串fxmlFile,它将定义将在后台设置的FXML文件。status==“admin”
if(status == "admin"){