2017-10-11 2 views
0

J'écris une application javafx qui simule la boutique de l'appareil Android.Ouverture de l'interface graphique différente dans l'application javafx basée sur la condition mysql

Je voudrais cette méthode spécifique pour ouvrir une fenêtre différente basée sur le contenu de la colonne "IsAdmin" dans la table de base de données mysql si l'utilisateur met le mot de passe et le nom d'utilisateur corrects.

Le contenu de la colonne "IsAdmin" est booléen.

Voici le code de la méthode:

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

Je ne savais pas comment devrais-je écrire une condition correcte compte tenu de champ "IsAdmin" et je n'ai pas pu trouver quoi que ce soit en ligne.

J'ai marqué l'espace dans la méthode où je voulais mettre ces conditions avec "****".

À quoi ces conditions ressemblent-elles? Ou y a-t-il une meilleure méthode pour réaliser ce résultat?

Je serai très reconnaissant pour toute réponse ou des conseils sur la façon d'améliorer mon code.

Nous vous remercions de votre temps.

Répondre

-1

essentiellement, je préfère faire une condition avec une table laisser dire "userid" qui contiennent:

  • nom d'utilisateur
  • mot de passe
  • état
  • (qui peut contenir admin, utilisateur final, ou autre)

donc dans le code java sera:

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

cela fonctionnera parfaitement, parce que la façon dont vous obtenez la condition en donnant l'étiquette de la colonne comme "IsAdmin" est bien trop mauvaise et inefficace.

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

Le code ci-dessus chercher la valeur dans la colonne d'administration, et la condition:

if(status == "admin"){ 

}

prendra état thhe si l'état de chaîne contient une chaîne "admin", alors il ouvrira la page d'admin, autrement il ira à la page de client.

note: il est préférable que vous fassiez une méthode séparée pour appeler le fichier fxml et que vous l'appellerez quand vous en aurez besoin. donne juste le paramètre String fxmlFile qui va définir le fichier FXML qui sera mis en scène.

+0

'status ==" admin "' [ne fonctionne pas.] (Https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – VGR