1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

[Resolvido] Como armazenar ID do usuário logado na aplicação em uma variável para utilizar em outras classes?

Edit: Tentativa: LoginController com construtor:

public class LoginController implements Initializable {

    private int     userId;
    private String  userName; 

    //public LoginController(int userId, String userName){this.userId = userId;   this.userName = new       SimpleStringProperty    (userName); }

    public void setUserid(int userId){  this.userId = userId;   }
    public int getUserid(){ return userId;  }

    public void setUserName(String userName){   this.userName = userName;   }
    public String getUserName(){        return userName;  }

// Muitos códigos aqui...

    @FXML    public void clickLogLogin(ActionEvent event) throws IOException, SQLException{

    String sql = "select id_col, nome_col, login_col, senha_col from odinswlmanager.colaboradores where login_col  = ? AND senha_col = ?";

//  Login validando em tabela do banco de dados.
                System.out.println("Validando preenchimento de campos de logon...");
        if( txtfLogUser.getText ()==null ||  txtfLogUser.getText ().trim().equals("") || 
            passfLogPass.getText()==null ||  passfLogPass.getText().trim().equals("")   )
            {   System.out.println("Campos de login e senha não preenchidos.");   
                lblLogError.setTextFill(Color.RED);
                lblLogError.setText("Favor preencher os campos corretamente.");     
     }  else{      

        try {   System.out.println("Validação de preenchimento aprovada.");

            conectar.conectarDB();
                System.out.println("Validando credenciais...");

                pst = conectar.getConnection().prepareStatement(sql);
                pst.setString(1, txtfLogUser.getText());
                pst.setString(2, passfLogPass.getText());
                rs = pst.executeQuery();

        if  (rs.next()){
                this.userId =   rs.getInt   ("id_col");
                this.userName = rs.getString("nome_col");
                System.out.println(userId);
                System.out.println(userName);

                conectar.desconectarDB();

                System.out.println("Credenciais aprovadas, abrir janela Main.");
//           String usuario = rs.getString("login_col");
//           String senha = rs.getString("senha_col");
                    Parent parentMain = FXMLLoader.load(getClass().getResource("Main.fxml"));
                    Scene sceneMain = new Scene(parentMain);
                    Stage stageMain = (Stage) ((Node) event.getSource()).getScene().getWindow();
                    stageMain.hide();
                    stageMain.setScene(sceneMain);
                    stageMain.setTitle("Odin SwL Manager");
                    stageMain.show();

        }   else {  conectar.desconectarDB();
                    System.out.println("Credenciais reprovadas.");
                    txtfLogUser.clear(); passfLogPass.clear();
                    lblLogError.setTextFill(Color.RED);
                    lblLogError.setText("Credenciais incorretas."); }
    }   catch   ( SQLException | IOException e) {
           Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, e);    }}

// - Outros códigos aqui.

    @Override
    public String toString(){
        return userName.get();}

    @Override
    public void initialize(URL url, ResourceBundle rb) {
       conectar = new Conectar();}    

    private Object getChildren() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
}

Na classe LoginController a cima, pega os Id e nome corretamente, pq me exibe nos System.out.printl os valores corretamente, porém na outra classe, quando tento exibir da mesma forma, retorna os valores 0 para int, e null para o String. Alguém sabe por que?

Classe onde deve exibir um textfield com o Id/Nome do usuário que logou, tentei de duas formas uma no método capturaID e outra direto no initialize com souts:

public class ConsultTabController implements Initializable {
// - Muitos códigos aqui;

 public void capturaID(){
            LoginController login = new LoginController();
                txtfLicColaboradores.setText( String.valueOf(login.getUserid()));}

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

        capturaID();
    //capturaID();     
        LoginController login = new LoginController();
        System.out.println(login.getUserid());
        System.out.println(login.getUserName());
        txtfLicColaboradores.setText( String.valueOf(login.getUserid()));
    }    
}

=================================================================================

Topico inicial:

Boa noite.

Como armazeno o resultado rs.getInt("id_col") em uma variável? Quero fazer isto para setar automaticamente este valor armazenado em uma TextField não editável em outra classe. Ou seja, uma TextField que irá mostrar o ID, Login ou Nome do usuário que logou nesta classe Login, para em outros fins de outras classes, gravar este ID em uma ação feita pelo usuário.

Imaginei que teria que criar um construtor com IntegerProperty, para poder enviar o valor para outras classes, mas está dando erro de compatibilidade entre Integer e IntegerProperty na hora de pegar o valor:

if (rs.next()){
userId = rs.getInt("id_col" );
System.out.println(userId);

Tentei alguns modos de conversão mas não está dando certo. Alguma ajúda?

Segue partes do código:

public class LoginController implements Initializable {

private IntegerProperty userId;    

    public LoginController  (Integer userId){   this.userId = new SimpleIntegerProperty(userId);    }

    public Integer  getUserId(){ return userId.get();    }
    public void     setUserId(Integer userId){  this.userId = new SimpleIntegerProperty(userId);    }
    public IntegerProperty userIdProperty(){    return userId;  }

//    private Conectar connection;
    Conectar conectar;
    PreparedStatement pst = null;
    ResultSet rs = null;
    ResultSet rs2 = null;

// ---- Alguns códigos definindo campos etc.

String sql  = "select id_col, login_col, senha_col from odinswlmanager.colaboradores where login_col  = ? AND senha_col = ?";

   @FXML    public void clickLogLogin(ActionEvent event) throws IOException, SQLException{

//  Login validando em tabela do banco de dados.
                   System.out.println("Validando preenchimento de campos de logon...");
        if( txtfLogUser.getText ()==null ||  txtfLogUser.getText ().trim().equals("") || 
            passfLogPass.getText()==null ||  passfLogPass.getText().trim().equals("")   )
            {   System.out.println("Campos de login e senha não preenchidos.");   
                lblLogError.setTextFill(Color.RED);
                lblLogError.setText("Favor preencher os campos corretamente.");     
     }  else{      

        try {   System.out.println("Validação de preenchimento aprovada.");

            conectar.conectarDB();
            System.out.println("Validando credenciais...");

                pst = conectar.getConnection().prepareStatement(sql);
                pst.setString(1, txtfLogUser.getText());
                pst.setString(2, passfLogPass.getText());
                rs = pst.executeQuery();


            if (rs.next()){

                userId = rs.getInt("id_col" );

                System.out.println(userId);

                conectar.desconectarDB();

                System.out.println("Credenciais aprovadas, abrir janela Main.");
                    Parent parentMain = FXMLLoader.load(getClass().getResource("Main.fxml"));
                    Scene sceneMain = new Scene(parentMain);
                    Stage stageMain = (Stage) ((Node) event.getSource()).getScene().getWindow();
                    stageMain.hide();
                    stageMain.setScene(sceneMain);
                    stageMain.setTitle("Odin SwL Manager");
                    stageMain.show();


                System.out.println("Armazenar loginId.");    


        }   else {  conectar.desconectarDB();
                    System.out.println("Credenciais reprovadas.");
                    txtfLogUser.clear(); passfLogPass.clear();
                    lblLogError.setTextFill(Color.RED);
                    lblLogError.setText("Credenciais incorretas."); }

        } catch ( SQLException | IOException e) {
           Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, e);    }}





//  Login local
/*       if (txtfLogUser.getText().equals("teste") && passfLogPass.getText().equals("teste")) {
            Parent parentMain = FXMLLoader.load(getClass().getResource("Main.fxml"));
            Scene sceneMain = new Scene(parentMain);
            Stage stageMain = (Stage) ((Node) event.getSource()).getScene().getWindow();

            stageMain.hide();
            stageMain.setScene(sceneMain);
            stageMain.setTitle("Odin SwL Manager");
            stageMain.show();
        }   
            else {
                txtfLogUser.clear();
                passfLogPass.clear();
                lblLogError.setText("Você é boba Rose?");   }
*/ 

//  Encerrando ClickLogin;    
   }   
public void clickExit(ActionEvent event) {
    Platform.exit();

    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        conectar = new Conectar();
    }    

    private Object getChildren() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
}
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

4 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags java javafx ou faça a sua própria pergunta.