Testar JRResultSetDataSource sem registros para gerar mensagem na aplicação

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?

Siesler,

Posso ter entendido errado, mas vamos lá:

O “jrsds.equals(jrsds)” irá retornar true porque você está comparando o mesmo objeto.

O jrsds também não será nulo porque na linha 12: “jrsds = new JRResultSetDataSource(rptDAO.getrptInfNutriAlim());”
você o inicializa.

Uma possível solução é armazenar o seu ResultSet, algo mais ou menos assim: ResultSet rs = rptDAO.getrptInfNutriAlim();
e utiliza-lo para ver se há dados ou não:

      if (!rs.next()) {  
             msg = "Não há dados para este relatório!";  
      }

Eu não testei essa solução, então de uma olhada pra ver se ao instanciar o JRResultSetDataSource ele precisa que o cursor
do ResultSet esteja na primeira posição, se for necessário, instancie o objeto jrsds antes do teste pra ver no que que dá.

[]'s