java - 使用 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();
}
}
解决方案
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;
}
}
推荐阅读
- windows - 在任务计划程序中的路径开始被忽略
- airflow - 气流任务实例卡在重试模式
- java - JUnit 5中TestName规则的等价物是什么?
- c# - 如何忽略 HttpWebRequest 中的 404 响应
- ssl - 为 X.509 证书颁发 CSR 和密钥文件时文件名的重要性
- javascript - 如何在 localhost chrome 上激活麦克风
- javascript - Flatpickr 总是保存当前的日期时间
- javascript - Wordpress AJAX 搜索不起作用
- mysql - 将重复的行转换为列
- android - 未找到处理 Intent { act=android.intent.action.VIEW dat=app:// } 的 Activity