ResultSet + MySQL

Olá pessoal,
eu estou com uma dúvida aqui
não estou conseguindo resolver
um problema com um ResultSet
Será q alguém poderia me dar uma
ajuda, fazendo o Favor?


http://alunos.dcc.ufla.br/~ricardoramos/images/imagem.rar

[]'s.

Olá, Ricardo!

Cara, seu erro é o seguinte:

Você tem uma instância da classe TipoUsuário. Para setar este atributo, você precisa então de um objeto TipoUsuário, certo?
Beleza, vamos lá…

No Banco de Dados, essa coluna TipoUsuario será uma FK. Ela guardará um valor inteiro (ou long, não sei).
Então, o que você vai fazer:


PreparedStatement usuarioStatement = usuarioConnection.prepareStatement("Select U.* From Usuarios U");

usuarioResultSet = usuarioStatement.executeQuery();

List<Usuario> usuarios = null;

if (usuarioResultSet != null) {

   usuarios = new ArrayList<Usuario>();
   
   if (usuarioResultSet.next()) {

      Usuario usuario = new Usuario();
      usuario.setId(usuarioResultSet.getInt(1);
      usuario.setLogin(usuarioResultSet.getString(2));
      //...

     // Isso é que tem que ser feito.
      usuario.setTipoUsuario(TipoUsuarioDAO.getInstance().LerUmTipoUsuario(usuarioResultSet.getInt(4));
  
      usuarios.add(usuario);
   }
}

Se não entendeu, avisa que explico certinho.

Espero ter ajudado!

[]s

Jóia Nicolas?
Obrigado pela ajuda,
mas eu não entendi o que vc quiser dizer
com essa cosulta:

"Select U.* From Usuarios U"

E tipo de Usuario é um Enum
eu posso fazer isso com um Enum?

usuario.setTipoUsuario(TipoUsuarioDAO.getInstance().LerUmTipoUsuario(usuarioResultSet.getInt(4));

Será que teria como você me explicar melhor?
ou alguém poderia me dar uma idéia de como
fazer isso? fazendo o favor.

[]'s.

Ricardo,

Bom, vamos lá.

"Select U.* From Usuarios U"

Essa foi uma simples consulta SQL que realizei. Consultei todos os campos (*) da Tabela Usuários, a qual possui um alias U.
A mesma coisa seria:

"Select * From Usuarios U"
//ou
"Select U.Nome, U.DataNascimento, U.OutroCampo From Usuarios U"

Isso é só uma maneira diferente de realizar a mesma consulta!

usuario.setTipoUsuario(TipoUsuarioDAO.getInstance().LerUmTipoUsuario(usuarioResultSet.getInt(4));  

Você, possivelmente, tem uma classe DAO para o pojo TipoUsuario, certo?
Se não tiver, deve criá-la, pois você necessitará dela.

Bom, dentro dessa classe, você pode ter um método chamado “readById”, ou “Ler pelo ID”. Esse método busca no banco o dado requerido que possui o ID que você passar por parâmetro.

Suponhamos estes valores na tabela Usuários:

ID Nome DataNascimento TipoUsuario
1 João 01/01/2000 2
2 José 15/04/1954 1
3 Maria 22/07/1983 1

E na tabela TipoUsuarios:

ID TipoUsuario
1 Administrador
2 Funcionário
3 Outro Usuário

No nosso “readById”, iremos pegar o valor da coluna TipoUsuario da tabela Usuarios.
Com esse valor, buscamos na tabela TipoUsuarios um objeto que tenha o ID que passamos por parâmetro.
A partir daí, na nossa classe Pojo, podemos jogar o objeto lido!

Fui claro?

Qualquer coisa, pergunte de novo e tentaremos explicar melhor!

Espero ter ajudado!

[]'s

Faaaala Ricardão. Á eu aqui denovo dando Pitaco! heheh

Ou no select, incrementando o que o amigo de cima disse, você poderia fazer:

"SELECT TipoUsuarios.TipoUsuario FROM TipoUsuarios INNER JOIN Usuarios ON Usuarios.TipoUsuario = TipoUsuarios.id WHERE Usuarios.id = idPassadoPorParametro"

Jóia Nicolas?
blz Anderson?
Obrigado pela ajuda eu entendi
a idéia de vc’s, mas não é bem
isso o q eu estou precisando fazer
pq eu tenho algo desse tipo:

public class UsuarioSistema {

    private int idUsuario;
    private String login;
    private String password;
    private TipoUsuario tipoUsuario;

    public UsuarioSistema(){

    }

    public UsuarioSistema(int id, String login, String password, 
            TipoUsuario usuario){
        this.idUsuario = id;
        this.login = login;
        this.password = password;
        this.tipoUsuario = usuario;
    }

public TipoUsuario getTipoUsuario() {
        return tipoUsuario;
    }

    public void setTipoUsuario(TipoUsuario tipoUsuario) {
        this.tipoUsuario = tipoUsuario;
    }
//Tipo Usuario é um Enum dentro da classe UsuarioSistema
public enum TipoUsuario{
        PRODUTOR, TECNICO;
    }

//Outros get e set

}
//Este método tem que servir para listar PRODUTOR  quanto TECNICO

public List<UsuarioSistema> listarUsuarioSistema() throws LAFQADaoException {

//Dentro desse método eu tenho isso:
while (rs.next()) {

                int id = rs.getInt(1);
                //Pego os login
                String login = rs.getString(2);
                //Pego os password
                String password = rs.getString(3);
                //Eu teria que pegar o tipo do Usuario que é um ENUM
                //O tipo pode ser um PRODUTOR ou TECNICO
                //tipoUsuario = tipoUsuario.getTipoUsuario() rs.getString(4);
                
                //list.add(new UsuarioSistema(id, login, password, tipoUsuario));
            }
//...
}

[]'S.

Acho que eu sei qual deve ser o meu problema
pelo jeito eu vou ter que fazer 2 métodos
um para listar os PRODUTORES e outro
para listar os TECNICOS.
Acho que não tem como fazer
um único método do jeito que
eu estou querendo fazer.
[]'s.

Me ajuda aqui.

Pra que você está fazendo isso aqui?

private TipoUsuario tipoUsuario;

Não poderia ser simplesmente?

private String tipoUsuario;

daí você faria:

[code]public void setTipoUsuario(String tipoUsuario) {
this.tipoUsuario = tipoUsuario;

}
public String getTipoUsuario() {
return tipoUsuario;
}
[/code]

e lá no ResultSet, vc teria tipoUsuario = tipoUsuario.setTipoUsuario(rs.getString(4));

Não serve?

Falaaa Anderson,
tudo jóia?
Eu tô fazendo isso
porque eu tô usando um
Enum para não precisar
fazer tratamento de String
lá na frente.

Abração Anderson.

Ricardo,

Cara, aconselho FORTEMENTE você a criar uma tabela no Banco de Dados chamada “TipoUsuario”.
Fica muito mais fácil de controlar, mais pra frente, pois você não vai ter que ficar fazendo IF’s ou WHILE’s ou FOR’s para varrer o seu Enumerator.

Cria uma Table TiposUsuarios, com um ID e o Tipo do Usuário (Produtor, Técnico, etc.). Liga ela com a tabela usuários.
Cria uma Pojo pra tabela TiposUsuarios, criando um DAO pra ela, e faz a consulta que disse acima pra ti.

Vai facilitar e muito tua vida.

Espero ter ajudado!

[]'s

Obrigado Nicolas pelas
as dicas, vou ver se eu consigo
arrumar um jeito, qq coisa eu
crio uma outra tabela msm.

Abração e obrigado a todos pela ajuda.