2017-10-11 3 views
0

나는 안드로이드 장치 가게를 시뮬레이션 javafx 응용 프로그램을 쓰고 있어요.다른 GUI를 MySQL의 조건을 기반으로 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

는 기본적으로, 나는 테이블과 조건을 포함하는 "용자 ID"말을 할 수 있도록하는 것을 선호 :

  • 이름
  • 비밀번호
  • 상태 (관리자, 최종 사용자, 또는 무엇이든을 포함 할 수 있습니다)

그래서 자바 코드는 다음과 같습니다

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"){ 

}

문자열 상태 문자열 "admin"을 포함하는 경우 thhe 상태를 취할 것입니다, 관리자 페이지가 열리 며 그렇지 않으면 클라이언트 페이지로 이동합니다.

참고 : fxml 파일을 호출하는 분리 된 메서드를 만드는 것이 좋으며 필요할 때마다 호출됩니다. 무대에 설정 될 FXML 파일을 정의 할 매개 변수 String fxmlFile을 제공하십시오.

+0

'status == "admin"'[작동하지 않습니다.] (https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – VGR

관련 문제