Java Desktop - Como criar sessão?

[quote=wellington.nogueira][quote=Agr0][quote=wellington.nogueira]Você precisa sobreescrever o método toString() da classe Usuario.
Esse é o retorno padrão do método na classe Object (que você implicitamente herda).[/quote]

Entao

Fiz o q vc falou e deu praticamente o mesmo erro !

O q eu fiz:

Entao, o q eu to fazendo de errado ?
Abraço[/quote]
E onde está a sobrescrita do método?

[code]class Usuario {
//Implementações do usuário

//método sobrescrito
@Override
public String toString() {
return nomeUsuario;
}
}[/code]

Caso não faça isso, continuará a logar a informação.
No teu exemplo, você não SOBRescreveu, trocou a variável e declarou (escreveu) o método.

O sysout chama implicitamente o método toString quando o parâmetro informado não é do tipo String. Ou seja, dificilmente é necessário declará-lo.[/quote]

Entao

Eu entendi mais ou menos o q vc quis dizer… So nao sei exatamente como fazer !

Tem como vc me ajudar + 1 uma vez e implemntar o vc ta falando ? !

Abraços

[quote=wellington.nogueira]Eu já coloquei um exemplo de como implementar o toString no meu post (que coloco novamente abaixo):

[code] class Usuario {
//Implementações da classe usuário

  //método sobrescrito  
  @Override  
  public String toString() {  
    return nome;  
  }  
}  [/code]

Mas vou descrever o que fiz:
Declaração da classe

    class Usuario {  

Aqui vc troca pela implementação já feita

//Implementações da classe usuário  

Agora, a sobreescrita do método:

//método sobrescrito @Override public String toString() { return nome; }

O mesmo pode ser feito para quaisquer classes.[/quote]

Entao

Coloquei o metodo na classe usuario ! Vou colar a classe aqui:

public class Usuario {

    /* VARIÁVEIS DE CONEXÃO COM O BANCO DE DADOS SUPORTE02 */
    private String url = "jdbc:mysql://suporte02:3306/sasi";
    private String login = "root";
    private String senha = "suportedip";

    /* VARIÁVEL DE CONTROLE DE ERROS DO BANCO DE DADOS */
    private StringBuffer msg = new StringBuffer();

    /* VARIÁVEIS UTILIZADAS FORA DA CLASSE USUÁRIO */
    public String nome = "";
    public String cadastro = "";
    public Boolean resultado = false;

    /* MÉTODO PRIVADO PARA CONEXÃO COM O BANCO DE DADOS */
    private Connection ConectarBD() {
        Connection conexao = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conexao = DriverManager.getConnection(url, login, senha);

        } catch (ClassNotFoundException cnfex) {
            msg.append("Erro Driver!");

        } catch (SQLException sqlex) {
            msg.append("Não conectou ao banco!");
        }

        return conexao;
    }

    /* MÉTODO RESPONSÁVEL PELA VALIDAÇÃO DE USUÁRIO
     * O MESMO RECEBE O LOGIN E SENHA E VERIFICA SE
     * É O MESMO DO BANCO DE DADOS PARA CONFERÊNCIA
     */
    public Boolean validarUsuario(String matricula, String senha) {

        String sql = "";
        Connection conexao = ConectarBD();

        // INSERINDO A QUERY DO BANCO PARA PEGAR A SENHA ATRAVÉS DO NOME
        sql += " select * from funcionarios";
        sql += " where matricula = '" + matricula + "'";
        sql += " and senha ='" + senha + "'";
        // Validando o login e a senha com o retorno do registro
        try {
            Statement st = conexao.createStatement();
            ResultSet rs = st.executeQuery(sql);
            if (rs.next()) {
                resultado = true;
                nome = rs.getString("matricula");
            }
            conexao.close();
        } catch (Exception e) {
            System.out.println("Erro na Validação!!!");
        }

        return resultado;
    }

    public String toString() {
        return nome;
    }
}

Coloquei o metodo la no final !

Vou colar aqui o codigo pos login:

 System.out.println("Logado com sucesso!!!");

            Usuario usuario = new Usuario();
            Sessao sessao = Sessao.getInstance();
            sessao.setUsuario(usuario); 

            Sessao.getInstance().getUsuario();
            System.out.println(Sessao.getInstance().getUsuario());

O “erro” mudou ! Qnd eu logo, nao aparace nada !

Alguma luz ?

[quote=Agr0][quote=wellington.nogueira]Eu já coloquei um exemplo de como implementar o toString no meu post (que coloco novamente abaixo):

[code] class Usuario {
//Implementações da classe usuário

  //método sobrescrito  
  @Override  
  public String toString() {  
    return nome;  
  }  
}  [/code]

Mas vou descrever o que fiz:
Declaração da classe

    class Usuario {  

Aqui vc troca pela implementação já feita

//Implementações da classe usuário  

Agora, a sobreescrita do método:

//método sobrescrito @Override public String toString() { return nome; }

O mesmo pode ser feito para quaisquer classes.[/quote]

Entao

Coloquei o metodo na classe usuario ! Vou colar a classe aqui:

public class Usuario {

    /* VARIÁVEIS DE CONEXÃO COM O BANCO DE DADOS SUPORTE02 */
    private String url = "jdbc:mysql://suporte02:3306/sasi";
    private String login = "root";
    private String senha = "suportedip";

    /* VARIÁVEL DE CONTROLE DE ERROS DO BANCO DE DADOS */
    private StringBuffer msg = new StringBuffer();

    /* VARIÁVEIS UTILIZADAS FORA DA CLASSE USUÁRIO */
    public String nome = "";
    public String cadastro = "";
    public Boolean resultado = false;

    /* MÉTODO PRIVADO PARA CONEXÃO COM O BANCO DE DADOS */
    private Connection ConectarBD() {
        Connection conexao = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conexao = DriverManager.getConnection(url, login, senha);

        } catch (ClassNotFoundException cnfex) {
            msg.append("Erro Driver!");

        } catch (SQLException sqlex) {
            msg.append("Não conectou ao banco!");
        }

        return conexao;
    }

    /* MÉTODO RESPONSÁVEL PELA VALIDAÇÃO DE USUÁRIO
     * O MESMO RECEBE O LOGIN E SENHA E VERIFICA SE
     * É O MESMO DO BANCO DE DADOS PARA CONFERÊNCIA
     */
    public Boolean validarUsuario(String matricula, String senha) {

        String sql = "";
        Connection conexao = ConectarBD();

        // INSERINDO A QUERY DO BANCO PARA PEGAR A SENHA ATRAVÉS DO NOME
        sql += " select * from funcionarios";
        sql += " where matricula = '" + matricula + "'";
        sql += " and senha ='" + senha + "'";
        // Validando o login e a senha com o retorno do registro
        try {
            Statement st = conexao.createStatement();
            ResultSet rs = st.executeQuery(sql);
            if (rs.next()) {
                resultado = true;
                nome = rs.getString("matricula");
            }
            conexao.close();
        } catch (Exception e) {
            System.out.println("Erro na Validação!!!");
        }

        return resultado;
    }

    public String toString() {
        return nome;
    }
}

Coloquei o metodo la no final !

Vou colar aqui o codigo pos login:

 System.out.println("Logado com sucesso!!!");

            Usuario usuario = new Usuario();
            Sessao sessao = Sessao.getInstance();
            sessao.setUsuario(usuario); 

            Sessao.getInstance().getUsuario();
            System.out.println(Sessao.getInstance().getUsuario());

O “erro” mudou ! Qnd eu logo, nao aparace nada !

Alguma luz ? [/quote]

Entao

Fiz o seguinte:


  @Override
    public String toString() {
        return nome;
    }

Nada ate agora !! :S

Loguei apenas para parabenizar pela resposta!

Funcionou perfeitamente!

Legal, não sabia desta tal “Singleton”
Mas fiquei com dúvidas sobre o funcionamento dela, por exemplo:
Quais são os valores atribuídos a cada nova sessão ou usuários criados?
Como esta classe identifica quando o usuário está logado ou deslogado?
Supondo que 10 pessoas se conectem em um servidor que tenha esta classe implementada, ela criará uma sessão para cada usuário?
Quando necessário, como ela identifica qual é o usuário que esta enviando alguma solicitação? (Quero dizer, qual o vínculo que ela tem com cada usuário que cria uma nova instancia?)

Eu vi o código postado, mas fiquei na dúvida sobre o funcionamento dela (não duvido que funciona, mas preciso saber como funciona…)

Obrigado!

[quote=Agr0]Qnd eu coloco o segundo codigo ele da erro no usuario:Cannot find Symbol… Fiz a classe certinha e tal. Qnd eu coloco o codico pos login ele da erro.
Os imports estao ok ! Ñ sei pq ta dando esse erro : /

Sessao sessao = Sessao.getInstance();
sessao.setUsuario(usuario);// //Usuario é um POJO qualquer;
//Esse codigo seria exercutado pos login.

O erro eh no b[/b] !

O q porderia ser ?[/quote]
Você criou a variável usuario?
[EDIT] Não vi que já havia sido respondido com o mesmo questionamento :roll: [/EDIT]

Você precisa sobreescrever o método toString() da classe Usuario.
Esse é o retorno padrão do método na classe Object (que você implicitamente herda).

[quote=Agr0][quote=wellington.nogueira]Você precisa sobreescrever o método toString() da classe Usuario.
Esse é o retorno padrão do método na classe Object (que você implicitamente herda).[/quote]

Entao

Fiz o q vc falou e deu praticamente o mesmo erro !

O q eu fiz:

Entao, o q eu to fazendo de errado ?
Abraço[/quote]
E onde está a sobrescrita do método?

[code]class Usuario {
//Implementações do usuário

//método sobrescrito
@Override
public String toString() {
return nomeUsuario;
}
}[/code]

Caso não faça isso, continuará a logar a informação.
No teu exemplo, você não SOBRescreveu, trocou a variável e declarou (escreveu) o método.

O sysout chama implicitamente o método toString quando o parâmetro informado não é do tipo String. Ou seja, dificilmente é necessário declará-lo.

Eu já coloquei um exemplo de como implementar o toString no meu post (que coloco novamente abaixo):

[code] class Usuario {
//Implementações da classe usuário

  //método sobrescrito  
  @Override  
  public String toString() {  
    return nome;  
  }  
}  [/code]

Mas vou descrever o que fiz:
Declaração da classe

Aqui vc troca pela implementação já feita

Agora, a sobreescrita do método:

//método sobrescrito @Override public String toString() { return nome; }

O mesmo pode ser feito para quaisquer classes.

Não aparece nada pq a String nome deve estar vazia. Use o depurador, coloque um breakpoint no return e verifique o conteúdo da variável.

Outra opção é inicializar essa variável com algum conteúdo (tipo String nome = “teste” ) só para verificar se imprime algo.