2017-10-11 10 views
0

我正在写的JavaFX应用程序,模拟的Android设备店。开放不同的GUI基于MySQL的条件

如果用户将在正确的用户名和密码,我想这个特定的方法来打开一个基于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

基本上,我宁愿做一个表的条件让说:“用户id”,它包含:

  • 用户名
  • 密码
  • 状态(其中可能包含管理,最终用户,或其他)

所以在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"); 
     } 
    }); 
    } 
} 

这将完美的工作,因为通过将列标签设置为“IsAdmin”来获得条件的方式太糟糕而且效率不高。

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

上面的代码会查找管理员列中的数值,条件:

if(status == "admin"){ 

}

将采取thhe条件,如果字符串状态包含字符串“管理员”,那么它将打开管理页面,否则它将转到客户端页面。

说明:您最好分离一个方法来调用fxml文件,并在需要时调用它。只需提供参数String fxmlFile,该参数将定义将在舞台上设置的FXML文件。

+0

'status ==“admin”'[will not work。](https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – VGR