Estou tentando buscar do banco de dados uma data com valor null e setar no meu objeto mas não estou tendo sucesso porque ao tentar pegar o Timestamp do ArrayList ele da NullPointerException.
obs: já tentei verificar se é diferente de null e se colocar no try catch não instancia o objeto ef.
public ArrayList filtrarEpiFuncionario(String query) throws SQLException{
Connection con = ConexaoBanco.getConexao();
Statement stat = con.createStatement();
try{
String sql;
sql = "select * from vcatalogepi_pfunc" + query;
ResultSet rs = stat.executeQuery(sql);
ArrayList<EpiFuncionario> efa = new ArrayList<>();
while (rs.next()) {
EpiFuncionario ef = new EpiFuncionario();
ef.setCodColigada(rs.getShort("CODCOLIGADA"));
ef.setChapa(rs.getString("CHAPA"));
ef.setCodEpi(rs.getString("CODEPI"));
ef.setDataRetirada(rs.getTimestamp("DATARETIRADA").toLocalDateTime());
//erro recebendo valor nulo - NullPointerException
rs.getTimestamp("DATARETIRADA").toLocalDateTime();
ef.setDataDevolucao(null);
ef.setCa(rs.getString("CA"));
ef.setRegistroRetirada(rs.getString("REGISTRORETIRADA"));
ef.setRegistroDevolucao(rs.getString("REGISTRODEVOLUCAO"));
efa.add(ef);
}
return efa;
}catch(SQLException se){
throw new SQLException("Erro ao buscar dados do histórico! " + se.getMessage());
}finally{
con.close();
stat.close();
}//fecha finally
}//fecha filtrarEpiFuncionario
Poste o erro completo e o código do EpiFuncionario
package model;
import java.time.LocalDateTime;
/**
*
* @author guilherme.oliveira
*/
public class EpiFuncionario {
private short codColigada;
private String chapa;
private String codEpi;
private LocalDateTime dataRetirada;
private LocalDateTime dataDevolucao;
private String ca;
private String registroRetirada;
private String registroDevolucao;
public EpiFuncionario() {
}
public EpiFuncionario(short codColigada, String chapa, String codEpi, LocalDateTime dataRetirada, LocalDateTime dataDevolucao, String ca, String registroRetirada, String registroDevolucao) {
this.codColigada = codColigada;
this.chapa = chapa;
this.codEpi = codEpi;
this.dataRetirada = dataRetirada;
this.dataDevolucao = dataDevolucao;
this.ca = ca;
this.registroRetirada = registroRetirada;
this.registroDevolucao = registroDevolucao;
}
public short getCodColigada() {
return codColigada;
}
public void setCodColigada(short codColigada) {
this.codColigada = codColigada;
}
public String getChapa() {
return chapa;
}
public void setChapa(String chapa) {
this.chapa = chapa;
}
public String getCodEpi() {
return codEpi;
}
public void setCodEpi(String codEpi) {
this.codEpi = codEpi;
}
public LocalDateTime getDataRetirada() {
return dataRetirada;
}
public void setDataRetirada(LocalDateTime dataRetirada) {
this.dataRetirada = dataRetirada;
}
public LocalDateTime getDataDevolucao() {
return dataDevolucao;
}
public void setDataDevolucao(LocalDateTime dataDevolucao) {
this.dataDevolucao = dataDevolucao;
}
public String getCa() {
return ca;
}
public void setCa(String ca) {
this.ca = ca;
}
public String getRegistroRetirada() {
return registroRetirada;
}
public void setRegistroRetirada(String registroRetirada) {
this.registroRetirada = registroRetirada;
}
public String getRegistroDevolucao() {
return registroDevolucao;
}
public void setRegistroDevolucao(String registroDevolucao) {
this.registroDevolucao = registroDevolucao;
}
@Override
public String toString() {
return "C�digo coligada: " + codColigada
+ "Chapa: " + chapa + "C�digo de EPI: " + codEpi
+ "Data da retirada: " + dataRetirada
+ "Data da devolucao: " + dataDevolucao
+ "CA: " + ca
+ "Registro da retirada: " + registroRetirada
+ "Registro da devolucao: " + registroDevolucao;
}
}
O erro completo vc diz do console?
Esse erro da quando tento filtrar
Quando eu seto direto o valor no null ele funciona por exemplo ef.setDataDevolucao(null);
Essa linha não dá erro, certo?
Porque eu também fiz o teste aqui e tanto o timestamp quanto o LocalDateTime aceitam null como parâmetro.
Não essa linha não da erro porque ela nunca irá receber null na minha aplicação
Rodrigo vlw pela ajuda ai cara eu resolvi, eu coloquei um try catch assim:
try{
ef.setDataDevolucao(rs.getTimestamp("DATADEVOLUCAO").toLocalDateTime());
}catch(NullPointerException ne){
ef.setDataDevolucao(null);
}
Apesar de ter resolvido, cuidado, pois qualquer outros erro de NullPointerException vai ser capturado e tratado da forma que você fez.
Eu dei uma pesquisada mas não encontrei nada a respeito, mas não recomendo que faça dessa forma.
Bom de qualquer forma obrigado, vou seguir fazendo pesquisas para ver se acho uma solução melhor.
ef.setDataDevolucao(rs.getTimestamp("DATADEVOLUCAO") != null
? rs.getTimestamp("DATADEVOLUCAO").toLocalDateTime()
: null);
Gambiarra, pra quê?
Testa se o TimeStamp é null pôxa.
TimeStamp ts = rs.getTimestamp("DATADEVOLUCAO");
ef.setDataDevolucao(ts == null ? null : ts.toLocalDateTime());
1 curtida