Trazer informação de Enum pelo resultSet

MySQL

Java

Modelagem

20/10/2015

Bom dia.

Sou novo aqui no fórum e também na programação.
Estou tentando terminar o método getById(), que busca informações do banco de dados.

Só que não sei como buscar informações de um Enum. Como eu faço?

@Override
    public Pessoa getById(long id) {
        Pessoa p = null;
        try{
            p = new Pessoa();
            Statement sta = connection.createStatement();
            
            ResultSet elements = sta.executeQuery("SELECT * from pessoa where id = " + id);
            if (elements != null){
                elements.first();
                p.setNome(elements.getString("nome")); //o que está entre aspas é o nome da coluna do BD
                p.setSalario(elements.getDouble("salario"));
                p.setFuncoes(elements.getString("funcoes"));
                p.setEmail(elements.getString("email"));
                p.setDataNascimento(elements.getDate("dataNascimento"));
                p.setSexo(elements.getSexo("sexo"));
            }
        } catch (SQLException ex){
            ex.printStackTrace();
        } finally {
            conexao.fecharConexao();
        }
        return l;
    }



O trecho:
p.setSexo(elements.getSexo("sexo"));

não funciona dessa maneira como para os outros atributos, pois Sexo é um enum.
Fabricio Cani

Fabricio Cani

Curtidas 0

Melhor post

Robson Teixeira

Robson Teixeira

20/10/2015

Boa Tarde,

No seu Enum crie um método que receba uma String e compare essa String com os elementos do enum,
Segue um exemplo

public enum Sexo{
		MASCULINO,
		FEMININO;
		
		public static Sexo getSexo(String sexo){
			for(Sexo sex:Sexo.values()){
				if(sex.toString().equals(sexo.toUpperCase())){
					return sex;
				}
			}
			return null;
		}
	}


estou assumindo que o seu banco guarde a string "MASCULINO" e "FEMININO" caso guarde de maneira diferente basta alterar o método no seu enum.


e seu código teria a seguinte alteração

public Pessoa getById(long id) {
        Pessoa p = null;
        try{
            p = new Pessoa();
            Statement sta = connection.createStatement();
             
            ResultSet elements = sta.executeQuery("SELECT * from pessoa where id = " + id);
            if (elements != null){
                elements.first();
                p.setNome(elements.getString("nome")); //o que está entre aspas é o nome da coluna do BD
                p.setSalario(elements.getDouble("salario"));
                p.setFuncoes(elements.getString("funcoes"));
                p.setEmail(elements.getString("email"));
                p.setDataNascimento(elements.getDate("dataNascimento"));
                p.setSexo(Sexo.getSexo(elements.getString("sexo")));
            }
        } catch (SQLException ex){
            ex.printStackTrace();
        } finally {
            conexao.fecharConexao();
        }
        return l;
    }
GOSTEI 2

Mais Respostas

Fabricio Cani

Fabricio Cani

20/10/2015

Beleza fera, funcionou certinho.

Obrigado
GOSTEI 0
POSTAR