2017-11-26 2 views
-2

자바를 배우기를 원했기 때문에 방금 시작한 javafx 애플리케이션이 있습니다. 나는 로그인 시스템에서 일하고있다. 내가 가지고있는 문제는 사용자가 그의 항공편 번호와 성으로 로그인하길 원한다는 것입니다.여러 테이블의 JavaFX 로그인 시스템

항공편 번호는 '항공편'이라는 테이블에 있고 성은 '승객'테이블에 있습니다. 사용자 이름과 암호가 같은 테이블에있는 로그인 시스템을 만드는 방법을 알고 있습니다. 하지만 두 테이블의 데이터를 사용하여이를 수행하는 방법을 잘 모릅니다.

누군가 나를 도울 수 있으면 정말 좋을 것 같습니다.

코드 :

package databasetesten; 

import databasetesten.connection.ConnectionUtil; 
import java.net.URL; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.util.ResourceBundle; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.fxml.FXMLLoader; 
import javafx.fxml.Initializable; 
import javafx.scene.Node; 
import javafx.scene.Scene; 
import javafx.scene.control.Alert; 
import javafx.scene.control.Alert.AlertType; 
import javafx.scene.control.PasswordField; 
import javafx.scene.control.TextField; 
import javafx.stage.Stage; 

/** 
* 
* @author Matt Holland 
*/ 
public class FXMLDocumentController implements Initializable { 

    @FXML 
    private TextField textEmail; 

    @FXML 
    private PasswordField textPassword; 

    Stage dialogStage = new Stage(); 
    Scene scene; 

    Connection connection = null; 
    PreparedStatement preparedStatement = null; 
    ResultSet resultSet = null; 

    public FXMLDocumentController() { 
     connection = ConnectionUtil.connectdb(); 
    } 

    @FXML 
    private void handleButtonAction(ActionEvent event) { 
     String email = textEmail.getText().toString(); 
     String password = textPassword.getText().toString(); 

     String sql = "SELECT * FROM Employee WHERE username = ? and password = ?"; 

     try { 
      preparedStatement = connection.prepareStatement(sql); 
      preparedStatement.setString(1, email); 
      preparedStatement.setString(2, password); 
      resultSet = preparedStatement.executeQuery(); 
      if (!resultSet.next()) { 
       infoBox("Enter Correct Email and Password", "Failed", null); 
      } else { 
       infoBox("Login Successfull", "Success", null); 
       Node source = (Node) event.getSource(); 
       dialogStage = (Stage) source.getScene().getWindow(); 
       dialogStage.close(); 
       scene = new Scene(FXMLLoader.load(getClass().getResource("FXMLMenuEmployee.fxml"))); 
       dialogStage.setScene(scene); 
       dialogStage.show(); 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void infoBox(String infoMessage, String titleBar, String headerMessage) { 
     Alert alert = new Alert(AlertType.INFORMATION); 
     alert.setTitle(titleBar); 
     alert.setHeaderText(headerMessage); 
     alert.setContentText(infoMessage); 
     alert.showAndWait(); 
    } 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 

    } 
} 

이 내 현재 로그인에있는 것입니다. 그리고 이것은 잘 작동합니다.

그리고 데이터베이스는 다음과 같습니다. 데이터베이스 이름 : 공항

테이블 : 비행

flightnumber IATA Timezone 
ENG456HNJ  AMS 1 

표 : 여객

firstname lastname  
Bob   Smith 

그래서 내 질문은 것 같아요. 승객이 항공편 번호와 성으로 로그인 할 수 있도록하려면 어떻게해야합니까? 두 개의 서로 다른 테이블의 데이터?

+0

성공적인 로그인으로 판단 할 수있는 실제 논리는 무엇입니까? –

+0

내가 실수하지 않은 경우 사용자가 동일한 비밀번호를 사용하여 항공편 번호 또는 성으로 로그인 할 수 있기를 원합니다 – Vanguard

+0

승객이 첫 번째 텍스트 상자에 자신의 항공편 번호를 입력하고 성을 두 번째로 입력하면 로그인이 성공합니다 텍스트 상자. 따라서 항공편 번호는 승객의 성명이고 패스워드는 승객의 성입니다 – Snidjers

답변

1

두 테이블의 데이터를 가져 오는 것이 좋지 않습니다. 귀하의 예에서는 이미 전자 메일과 암호로 구현했습니다. 항공편을 이용하면 이메일을 항공편 번호로 변경하고 패스워드를성에 맞게 변경해야합니다.

String sql = "SELECT * FROM `FLIGHTS` WHERE `flightNumber` = ? and `lastName` = ?"; 

사용자에게 보여줄 필요가있는 데이터로부터 데이터를 가져온 후에.

+0

도움 주셔서 감사합니다. 모든 것이 1 개의 테이블에 있도록 데이터베이스 레이아웃이 변경됩니다! 다시 한 번 감사드립니다! – Snidjers

+0

@Snidjers 당신은 qelcome입니다. – Vanguard