Pessoal, tenho uma aplicação, e preciso exibir uma mensagem caso não haja dados no relatório:
meu método DAO:
public ResultSet getrptInfNutriAlim() throws SQLException, ClassNotFoundException {
PreparedStatement ps = (PreparedStatement) getPreparedStatement("" +
"SELECT * " +
"FROM VW_INF_NUTR_ALIMENTO " +
"WHERE ID_EMPRESA = ?" +
"ORDER BY GRUPO, SUB_GRUPO, TIPO_ALIMENTO, ALIMENTO");
ps.setInt(1, usuarioLogado.getEmpresa().getIdEmpresa());
ResultSet rs = ps.executeQuery();
return rs;
}
meu meéodo do Bean:
public String geraRelatorioPassandoResultSet() {
saida = null;
String jasper = getDiretorioReal("/jasper/" + nomeRelat + ".jasper");
System.out.println("geraRelatorioFiltroPassandoResultSet empresa: " + usuarioLogado.getEmpresa().getIdEmpresa());
try {
// Gero o ResultSet que será enviado a partir da conexão aberta
if (nomeRelat.equals("rptInfNutriAlim")){
JRResultSetDataSource jrsds = null;
try {
rptDAO.setUsuarioLogado(usuarioLogado);
jrsds = new JRResultSetDataSource(rptDAO.getrptInfNutriAlim());
System.out.println("jrsds.equals(jrsds): " + jrsds.equals(jrsds));
if (jrsds.equals(jrsds) == false) {
msg = "Não há dados para este relatório!";
}
} catch (SQLException ex) {
Logger.getLogger(RelatoriosFace.class.getName()).log(Level.SEVERE, null, ex);
FacesContext.getCurrentInstance().addMessage(ex.getMessage(), new FacesMessage(FacesMessage.SEVERITY_INFO, ex.getMessage(), ex.getMessage()));
} catch (ClassNotFoundException ex) {
Logger.getLogger(RelatoriosFace.class.getName()).log(Level.SEVERE, null, ex);
FacesContext.getCurrentInstance().addMessage(ex.getMessage(), new FacesMessage(FacesMessage.SEVERITY_INFO, ex.getMessage(), ex.getMessage()));
}
disableButton = false;
if (msg != null) {
disableButton = true;
FacesContext.getCurrentInstance().addMessage(msg, new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg));
}
// Mando o jasper gerar o relatório
JasperPrint print = JasperFillManager.fillReport(jasper, null, jrsds);
// Gero o PDF
preenchePdf(print);
System.out.println("rptInfNutriAlim " + saida);
}
O problema é que o jrsds.equals(jrsds) sempre retorna true, mesmo que a consulta não retorne dados.
Já tentei:
jrsds == null
e ele nunca retorna null
jrsds.next()
neste caso o teste consome uma linha do resultado, assim, sempre tenho uma linha a menos no relatório do que o resultado da consulta.
Sabem como resolver?