Как сделать глобальную переменную из выборки данных в базе данных (хранить и извлекать ее) с помощью javafx? - PullRequest
0 голосов
/ 04 октября 2019

Добрый день, после прочтения очень многих форумов и QnA. Мне все еще неясно, как я могу хранить данные в глобальном масштабе и извлекать их всякий раз, когда они мне нужны, и / или извлекать их в других формах FXML.

Вот что я только начал. Сначала я создал общедоступный Java-класс для хранения и извлечения моих данных.

TestPassData.java

public class TestPassData {

    private static int PassData;

    public static int getPassData() {
        return PassData;
    }

    public static void setPassData(int PassData) {
        TestPassData.PassData = PassData;
    }

}

затем контроллер, где я получаю данные из базы данныхи сохраните его в TestPassData

FetchDataController.java

con = pst.prepareStatement("SELECT Emp_ID FROM Employee WHERE UserName = ? AND Password = ?");
pst.setString(1, un);
pst.setString(2, pw);
rs = pst.executeQuery();

while(rs.next()){
      TestPassData.setPassData(rs.getInt("Emp_ID");
}

Тогда вот где моя проблема. Я не могу получить данные, хранящиеся в переменной.

RetrieveStoredDataController.java

lblPassID.setText(Integer.toString(TestPassData.getPassData())); 

Я всегда получаю 0 в качестве возвращаемого значения. Надеюсь, что кто-то поделится своей идеей по этому поводу.

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Я наконец-то создал глобальную переменную, которую смог получить из любого класса Controller. Я просто хочу узнать ваше мнение о том, как я это запрограммировал. (Это плохо или это хорошо использовать?)

сначала я создал публичный интерфейс

IUserID.java

public interface IUserID {
   int userID();
}

затемоткрытый класс PerformLogin

public class PerformLogin implements IUserID {

private Connection con;
private PreparedStatement pst = null;
private ResultSet rs = null;

private static int userLoginID;

public PerformLogin(String un, String pw, StackPane basePane, Node rootPane) {

    try {
        this.con = bghsystems.database.DBHandler.connect();

        pst = con.prepareStatement("SELECT Emp_ID FROM User_Accnt where UA_UName = ? AND UA_Pass = ? COLLATE Latin1_General_CS_AS");
        pst.setString(1, un);
        pst.setString(2, pw);
        rs = pst.executeQuery();

        if (rs.next()) {
            PerformLogin.userLoginID = rs.getInt("Emp_ID");      // here is where I pass the data to the global variable

            try {
                Stage stage = (Stage) basePane.getScene().getWindow();
                stage.close();

                FXMLLoader loader = new FXMLLoader(getClass().getResource("/bghsystems/views/Dashboard.fxml"));
                Parent root = (Parent) loader.load();
                stage.setScene(new Scene(root));

                Rectangle2D primaryScreenBounds = Screen.getPrimary().getVisualBounds();
                stage.setX(primaryScreenBounds.getMinX());
                stage.setY(primaryScreenBounds.getMinY());
                stage.setWidth(primaryScreenBounds.getWidth());
                stage.setHeight(primaryScreenBounds.getHeight());

                stage.show();

            } catch (IOException ex) {
                Logger.getLogger(PerformLogin.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
        }

    } catch (ClassNotFoundException | SQLException ex) {
        Logger.getLogger(PerformLogin.class.getName()).log(Level.SEVERE, null, ex);
    }

}

public PerformLogin() {

}

@Override
public int userID() {
    return PerformLogin.userLoginID;   //here is where I store the data
}

, а затем код, в котором я использовал для извлечения сохраненных данных.

RandomControllers

 PerformLogin pd = new PerformLogin();
    lblEmpID.setText(Integer.toString(pd.userID()));
0 голосов
/ 15 октября 2019

Майкл Кастильо, что Zephyr сказал об использовании Global Variable, очень верно. На мой взгляд, с большой силой приходит большая ответственность. Мы устанавливаем статическую переменную в нашем классе Database Helper, потому что хотим, чтобы что-то происходило только один раз в другом классе контроллератак что вам нужно управлять этим, или он будет управлять вами. Задайте для него значение «» или «FALSE». В новом классе контроллеров, который вы хотите использовать эту мощную глобальную переменную, убедитесь, что она импортируется следующим образом

import static checkbook.CreateTableUtil.firstTIME;

Добро пожаловать в переполнение стека

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...