A conversão estava sendo feita pela classe do DTO, porém surgiu a necessidade de converter essa inofrmação pela classe DAO.
public List<UsuarioDTO> listar() {
List<UsuarioDTO> lista = null;
String sql = "select * from usuario";
try {
stmt = conn.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
lista = new ArrayList<UsuarioDTO>();
while (rs.next()) {
UsuarioDTO usuario = new UsuarioDTO();
usuario.setId(rs.getLong("id_usuario"));
usuario.setNome(rs.getString("nome_usuario"));
usuario.setEmail(rs.getString("email_usuario"));
usuario.setSexo(rs.getString("sexo_usuario"));
Date data = rs.getDate("dataNascimento_usuario");
usuario.setDataNascimento(DataUtil.parseData(data));
lista.add(usuario);
}
rs.close();
stmt.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return lista;
}
Crie um enum sexo, com código e valor. código vai ser ‘M’ e o value “Masculino”.
Assim vc consegue pegar o nome completo do sexo sem problemas
Eu já criei a classe [color=red]SexoEnumerarion [/color] na tela de cadastro a informação vem como “Masculino” e passa para o Banco “M”. Porém na tela “listar.jsp” a informação vem como CHAR “M”.
Public enum SexoEnumeration {
MASCULINO("M", "Masculino"), FEMININO("F", "Feminino");
private final String code;
private final String message;
/**
* Construtor do enum
* @param code - Valor do enum
* @param message - Label do enum
*/
private SexoEnumeration(String code, String message) {
this.code = code;
this.message = message;
}
/**
* Returns field code.
* @return code
*/
public String getCode() {
return code;
}
/**
* Returns field message.
* @return message
*/
public String getMessage() {
return message;
}
/**
* Lista retorna valores do Enum
* @return vRetorno
*/
public static List<SexoEnumeration> getValues() {
List<SexoEnumeration> vRetorno = new ArrayList<SexoEnumeration>();
SexoEnumeration[] vList = SexoEnumeration.values();
for (SexoEnumeration vSexo : vList) {
vRetorno.add(vSexo);
}
return vRetorno;
}
}
Tentaria algo assim:
usuario.setSexo(SexoEnumeration.valueOf(rs.getString(“sexo_usuario”)).getMessage());
Cria um método na Enum:
valueOfCode(String code) {
for(E e : E.values()) {
if(e.getCode().equals(code)) {
return e;
}
}
return null;
}
Ai recupera assim:
E e = E.valueOfCode(rs.getString(“COLUNA_DO_BANCO_COM_O_CODIGO”));
Onde ‘E’ é sua enumeração(SexoEnumeration se não me engano). É melhor por a enumeração no seu DTO do usuário, melhor que por a String.
Não teve erro na imlementação, mas ao executar me deparei com o seguinte erro 500.
HTTP Status 500 - No enum constant br.com.utdd.cadastro.enumeration.SexoEnumeration.M
type Exception report
message No enum constant br.com.utdd.cadastro.enumeration.SexoEnumeration.M
description The server encountered an internal error (No enum constant br.com.utdd.cadastro.enumeration.SexoEnumeration.M) that prevented it from fulfilling this request.
exception
java.lang.IllegalArgumentException: No enum constant br.com.utdd.cadastro.enumeration.SexoEnumeration.M
java.lang.Enum.valueOf(Unknown Source)
br.com.utdd.cadastro.enumeration.SexoEnumeration.valueOf(SexoEnumeration.java:1)
br.com.utdd.cadastro.dao.UsuarioDAO.listar(UsuarioDAO.java:103)
br.com.utdd.cadastro.action.CadastroAction.listar(CadastroAction.java:75)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
Foi o que disse na resposta acima, não existe a enumeração SexoEnumeration.M, tem SexoEnumeration.MASCULINO, então para recuperar o valor pelo código(‘M’) vc vai precisar implementar o método citado acima.
valueOfCode(String code) {
for(SexoEnumeration e : SexoEnumeration.values()) {
if(e.getCode().equals(code)) {
return e;
}
}
return null;
}
Ok, ela demorou a apareceu so depois.
Obrigado pela ajuda!!
qual implementação vc usou ??
Eu estou implementando no UsuarioDAO, so que agora ele retornqa todos como “FEMININO”.
public List<UsuarioDTO> listar() {
List<UsuarioDTO> lista = null;
String sql = "select * from usuario";
try {
stmt = conn.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
lista = new ArrayList<UsuarioDTO>();
while (rs.next()) {
UsuarioDTO usuario = new UsuarioDTO();
usuario.setId(rs.getLong("id_usuario"));
usuario.setNome(rs.getString("nome_usuario"));
usuario.setEmail(rs.getString("email_usuario"));
// usuario.setSexo(rs.getString("sexo_usuario"));
if (rs.getString("sexo_usuario") == "M")
usuario.setSexo("Masculino");
else
usuario.setSexo("Feminino");
Date data = rs.getDate("dataNascimento_usuario");
usuario.setDataNascimento(DataUtil.parseData(data));
lista.add(usuario);
}
rs.close();
stmt.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return lista;
}
}
comparar String é com o método equals da classe String, não com ==
Isso mesmo, funcionou muito obrigado pela ajuda!!!
Rapaz, era pra fazer assim, usando a enumeração. Do jeito que tá sempre vai ser Feminino.
…
usuario.setSexo(SexoEnumeraton.valueOfCode(rs.getString(“sexo_usuario”)).getDescription());
…
Ou usando a enum na classe usuário, que fica melhor ainda.
usuario.setSexo(SexoEnumeraton.valueOfCode(rs.getString(“sexo_usuario”))); // Usuario.sexo é a enum SexoEnumeration