首页 > 解决方案 > 使用 setter 和 getter 分配从数据库中选取的数据

问题描述

我已成功从数据库中检索数据。其中一个变量是我想在 DashboardController 中使用的 uniqueiddb。我需要它,因为我必须查询数据库中各个用户的数据。但它是在 LoginController 中检索到的。我必须将其移至 DashboardController。我尝试使用 setter 来设置 LoginController 中的值。当我在 DashboardController 中使用 getter 时,我得到一个 NullPointException。这意味着该值未设置。我不明白为什么。有人请指出我哪里出错了。我不知道是否应该使用 getter 和 setter 将这个 uniqueIddb 从一个类移动到另一个类。我要解决的问题是在类之间传递用户数据。

登录控制器.java

package Login;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import sample.databaseHandler;

import javax.swing.*;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Random;
import java.util.ResourceBundle;

public class LoginController implements Initializable {

    @FXML
    private TextField email;

    private String uniqueIddb;

    Connection con = null;

    public LoginController() {

    }

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

    }

    private void closeStage(){
        ((Stage) email.getScene().getWindow()).close();
    }
    @FXML
    private void loginUser(ActionEvent actionEvent) {

        PreparedStatement stmt;
        String userEmail = email.getText();
        System.out.println(userEmail);

        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/Student Portal", "root", "");
            System.out.println("connection has been made");
            stmt = con.prepareStatement("SELECT Email,UniqueId FROM members WHERE Email = ? ");
            stmt.setString(1, userEmail);
            System.out.println(stmt);

            ResultSet result = stmt.executeQuery();

            while (result.next()) {
                String emaildb = result.getString("Email");
                *uniqueIddb = result.getString("UniqueId");*

                if(userEmail.equals(emaildb) ){

                    closeStage();
                    Stage stage = new Stage();
                    Parent root = null;
                    try {
                        root = FXMLLoader.load(getClass().getResource("/Dashboard/dashboard.fxml"));
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    Scene scene = new Scene(root);
                    stage.setScene(scene);
                    stage.show();
                    **setUniqueIddb(uniqueIddb);**

                } else{
                    //pass an alert for wrong credentials
                }

            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Cant load Database", "Database Error", JOptionPane.ERROR_MESSAGE);
            System.exit(0);
        }
}

    public void setUniqueIddb(String uniqueIddb) {
        this.uniqueIddb = uniqueIddb;
    }



    public String getUniqueId() {
        return uniqueIddb;
    }
}

仪表板控制器.java

package Dashboard;

import Login.LoginController;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage;

import javax.swing.*;
import java.io.IOException;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class DashboardController {
    @FXML
    private Label uniqueIdDisplay;

    public DashboardController() {
        unique();
    }

    public void unique(){
        LoginController login = new LoginController();

        **String uniqueID = login.getUniqueId();**
        uniqueIdDisplay.setText(uniqueID);
    }



    @FXML
    public void openGeneral(MouseEvent mouseEvent) {


        try {
            Stage stage = new Stage();
            Parent root = FXMLLoader.load(getClass().getResource("/General/optionGeneral.fxml"));
            Scene scene = new Scene(root);
            stage.setScene(scene);
            stage.show();



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

    @FXML
    public void openProfile(MouseEvent mouseEvent) {

        try{
            Stage stage = new Stage();
            Parent root = FXMLLoader.load(getClass().getResource("/Profile/optionProfile.fxml"));
            Scene scene =new Scene(root);
            stage.setScene(scene);
            stage.show();

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

    @FXML
    public void openPerformances(MouseEvent mouseEvent) {
        try{
            Stage stage = new Stage();
            Parent root = FXMLLoader.load(getClass().getResource("/Performances/optionPerformances.fxml"));
            Scene scene =new Scene(root);
            stage.setScene(scene);
            stage.show();

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

    @FXML
    public void openLectures(MouseEvent mouseEvent) {
        try{
            Stage stage = new Stage();
            Parent root = FXMLLoader.load(getClass().getResource("/Lectures/optionLectures.fxml"));
            Scene scene =new Scene(root);
            stage.setScene(scene);
            stage.show();

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

    @FXML
    private void enrollToCourse(MouseEvent mouseEvent) {

        Stage stage = new Stage();
        Parent root = null;
        try {
            root = FXMLLoader.load(getClass().getResource("enrollCourseDialog.fxml"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }
}

标签: javajavafx

解决方案


In LoginController :

  String emaildb = result.getString("Email");
  uniqueIddb = result.getString("UniqueId");
  // to acsses Dashboard controller
  DashboardController controller = loader. < DashboardController > getController();
  //call the methode seID defined in DashboardController  to set the variable 
  controller.setID(uniqueIddb);

in your Dashboard controller Define seID Methode :

 class DashboardController {
      // Declaration of variable 
      int uniqueIddb;
      void initialize() {}
      // Methode setID
      void seID(String myID) {
      this.uniqueIddb = myID;
      }
  }

推荐阅读