Enum returns null of the bank

0

Hello, I'm implementing a DAO and doing some testing, I'm having some problems with enums. When running the test class the enum Size returns null, but in the database I have filled records correctly.

Test class:

package br.com.caelum.jdbc.teste;

import java.util.List;

import br.com.caelum.jdbc.dao.ContatoDAO;
import br.com.caelum.jdbc.modelo.Contato;
public class TestaLista {
    public static void main(String[] args) {
        ContatoDAO contatoDAO = new ContatoDAO();

        List<Contato> contatos = contatoDAO.getLista();

        for (Contato contato : contatos) {
              System.out.println("Nome: " + contato.getNome());
              System.out.println("Email: " + contato.getEmail());
              System.out.println("Endereço: " + contato.getEndereco());
              System.out.println("Data de Nascimento: " + contato.getDataNascimento() + "\n");
              System.out.println("Tamanho: " + contato.getTamanho());
          }
    }
}

This is the Contact class, my main object and has an equivalent table in the database:

import java.time.LocalDate;
import java.time.LocalTime;

import br.com.caelum.jdbc.dao.Tamanho;

public class Contato {

    private Long id;
    private String nome;
    private String email;
    private String endereco;
    private LocalDate dataNascimento;
    private LocalTime horaAgendada;
    private Tamanho tamanho;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public LocalDate getDataNascimento() {
        return dataNascimento;
    }

    public void setDataNascimento(LocalDate dataNascimento) {
        this.dataNascimento = dataNascimento;
    }

    public LocalTime getHoraAgendada() {
        return horaAgendada;
    }

    public void setHoraAgendada(LocalTime horaAgendada) {
        this.horaAgendada = horaAgendada;
    }

    public Tamanho getTamanho() {
        return tamanho;
    }
    public void setTamanho(Tamanho tamanho) {
        this.tamanho = tamanho;
    }
}

My Enum Size (I'm just testing the bank's returns, so I've done an enum just to test). I added method to Size to try to solve, because without it I could not even return, just the error below:

  

Exception in thread "main" java.lang.NullPointerException: Name is null       at java.lang.Enum.valueOf (Enum.java:236)       at br.com.caelum.jdbc.dao.Tamanho.valueOf (Size.java:1)       at br.com.caelum.jdbc.dao.ContatoDAO.getList (ContactDAO.java:61)       at br.com.caelum.jdbc.teste.TestaLista.main (TestaLista.java:17)

    package br.com.caelum.jdbc.dao;

public enum Tamanho {

    xSmall("x-small"),
    small("small"),
    medium("medium"), 
    large("large"),
    xLarge("x-large'");

    private String tamanho;

    Tamanho(final String tamanho){
        this.tamanho = tamanho;
    }

    public String getTamanho() {
        return tamanho;
    }

    public void setTamanho(String tamanho) {
        this.tamanho= tamanho;
    }

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



    public static Tamanho toTamanho(String value) {
        for (Tamanho tamanho : values()) {
            if (tamanho.equals(value)) {
                return tamanho;
            }
        }
        return null;
    }

}

And this is the result of running the TestList class:

Nome: teste
Email: [email protected]
Endereço: Rua teste testeira
Data de Nascimento: 2018-02-21

Tamanho: null
Nome: teste
Email: [email protected]
Endereço: Rua teste testeira
Data de Nascimento: 2018-02-21

Tamanho: null
Nome: teste
Email: [email protected]
Endereço: Rua teste testeira
Data de Nascimento: 2018-02-21

Tamanho: null
Nome: teste
Email: [email protected]
Endereço: Rua teste testeira
Data de Nascimento: 2018-02-23

Tamanho: null
Nome: teste
Email: [email protected]
Endereço: Rua teste testeira
Data de Nascimento: 2018-02-23

Tamanho: null

A print of the table in the database:

    
asked by anonymous 26.02.2018 / 15:58

1 answer

1

You can try this too:

// método getLista()

...

contato.setTamanho(Tamanho.valueOf(objetoResultSet.getString("size")));

As described as your table has null value in some records this causes the error NullPointerException when assigning in your enum.

One way around this error could be to fetch only records with a size other than null.

  • select * from contatos where size != null
26.02.2018 / 17:07