Erro do result set

Ola galera
to na parte final de um sistema
na parte de relatorios
porem to criando todos relatorios a mao mesm
e faço os selects que precisa e tals
dai
em nenhum momento eu fecho a coneçao ou o result set
mas o netbeans dah esse erro

java.sql.SQLException: Operation not allowed after ResultSet closed

já aconteceu para algum de voces?
abraços!
agradeço desde já a ajuda…

Em algum momento ele está sendo fechado sim, se vc colocar o código fica amis fácil de ajudar.

public void relatorioDevedores() {
        try {
            PdfWriter.getInstance(documento, new FileOutputStream("Relatório_devedores.pdf"));
            documento.open();
            String s = "select * from contrato where contratoId not in (select idContrato from cadLancamentos where data>='" + data.datai() + "' and data<='" + data.dataf() + "' )  ";
            System.out.println("sql do relatorio " + s);
            rs = st.executeQuery(s);
            rs.last();
            int numLinhas = rs.getRow() + 1;
            rs.beforeFirst();
            documento.add(new Paragraph("Condominio do edificio João Alberto Schmitt"));
            documento.add(new Paragraph("Relatorio dos Devedores do Mes de " + getData(cal) + ""));
            Table tabela = new Table(6, numLinhas);
            tabela.setAutoFillEmptyCells(true);
            tabela.addCell("Nome");
            tabela.addCell("Id. Condo.");
            tabela.addCell("Andar");
            tabela.addCell("Numero");
            tabela.addCell("Tamanho");
            tabela.addCell("vlr.por cub.");
            int x = 0;

/*o erro aponta aqui*/ 
while (rs.next()) {

                x = Integer.parseInt(rs.getString("contratoId"));
                System.out.println("x vale ->" + x);
                tabela.addCell("    " + rs.getString("pessoaId"));
                tabela.addCell("    " + rs.getString("condominioId"));
                tabela.addCell("    " + rs.getString("andar"));
                tabela.addCell("    " + rs.getString("numero"));
                tabela.addCell("    " + rs.getString("tamanho"));
                tabela.addCell("    " + calculaCub(x));
            }

            tabela.addCell("");
            tabela.addCell("");
            tabela.addCell("        DATA");
            tabela.addCell("        " + getData(cal));
            tabela.addCell("        ");
            tabela.addCell("        ");
            documento.add(tabela);

        } catch (Exception e) {
            e.printStackTrace();
        }
        documento.close();
    }

    public float calculaCub(int codContrato) {
        float resultado = 0;
        try {
            //tamanho contrato
            //String s = "select tamanho from contrato where contratoId=" + codContrato + " and contratoId not in (select idContrato from cadLancamentos where data>='" + data.datai() + "' and data<='" + data.dataf() + "' )  ";
            String s = "select tamanho from contrato where contratoId=" + codContrato + "";
            System.out.println("" + s);
            ResultSet rs4 = st.executeQuery(s);
            rs4.next();
            float tamContrato = Float.parseFloat(rs4.getString("tamanho"));
            System.out.println("" + tamContrato);
            resultado = (totcondo(codContrato) / somaC()) * tamContrato;
            System.out.println("return resultado aqui   " + resultado);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultado;
    }

    private float somaC() {
        float somaContratoT = 0;
        try {
            String t = "select sum(tamanho) as soma from contrato where ativo='t' ";
            System.out.println("" + t);
            ResultSet rs2 = st.executeQuery(t);
            rs2.next();
            somaContratoT = Float.parseFloat(rs2.getString("soma"));
            System.out.println("" + somaContratoT);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return somaContratoT;
    }

    private float totcondo(int c) {
        System.out.println("id contrato no metodo totcondo    "+c);
        float totalCondo = 0;
        try {
            String y = "SELECT A.tamanhoTotal,A.condominioId FROM condominio A, contrato B WHERE A.condominioId =B.condominioId and B.contratoId=" + c + " limit 1";
            System.out.println("" + y);
            ResultSet rs3 = st.executeQuery(y);
            rs3.next();
            totalCondo = Float.parseFloat(rs3.getString("tamanhoTotal"));
            System.out.println("" + totalCondo);
        } catch (Exception e) {
            e.printStackTrace();
        }


        return totalCondo;
    }

mas nao sei onde tofechando
a logica eh isso ai
to criando o pdf na mao como disse
e o erro aponta pro while que tem no metodo reletoriodevedores
nao sei por que

esqueci de fala ele percorre o while 1 vez executa o metodo
calculaCub
e faz oque tem que fazer ali
quando volta pra fazer o while de novo ele da o erro

Testa ai o seguinte, no calculaCub usa outro PreparedStatement pra gerar o ResultSet

public float calculaCub(int codContrato) { float resultado = 0; try { //tamanho contrato String s = "select tamanho from contrato where contratoId=?" ; System.out.println("" + s); PreparedStatement st1 = SUA_CONNECTION.preparedStatement(s); st1.setInt(1, s); ResultSet rs4 = st1.executeQuery(s); rs4.next(); float tamContrato = Float.parseFloat(rs4.getString("tamanho")); System.out.println("" + tamContrato); resultado = (totcondo(codContrato) / somaC()) * tamContrato; System.out.println("return resultado aqui " + resultado); } catch (Exception e) { e.printStackTrace(); } return resultado; }

o velhinho oque faz o st1.setInt(1,s);
o s tem que ser um int que no meu caso ai ele eh o sql!!!
nao intendi?
soh pra tira uma duvida!!
flw

ops… foi mal

st1.setInt(1, codContrato);

agora coloquei tudo como voce falou e
dah esse erro justo nessa linha do st1.setInt
mas ele pelo menos percorre todo while
mas nao calcula nada por causa desse erro

No parameters defined during prepareCall()

cara soh te pesso isso por que nunca trabalhei com preparedstatement nao faço nem ideia do que pode tah acontecendo
flw

alguem sab por que eu tenho que colocar o setInt depois de criar o prepared statement?
flw

Vc alterou o sql???

O setInt é pra setar o parâmetro onde tem a “?”.

Seu método deve ficar assim:

[code]
public float calculaCub(int codContrato) {
float resultado = 0;
PreparedStatement st1 = null;
ResultSet rs4 = null;
try {
//tamanho contrato
String s = “select tamanho from contrato where contratoId=?” ;
System.out.println("" + s);
st1 = SUA_CONNECTION.preparedStatement(s);
st1.setInt(1, codContrato);
rs4 = st1.executeQuery(s);
rs4.next();
float tamContrato = Float.parseFloat(rs4.getString(“tamanho”));
System.out.println("" + tamContrato);
resultado = (totcondo(codContrato) / somaC()) * tamContrato;
System.out.println("return resultado aqui " + resultado);
} catch (Exception e) {
e.printStackTrace();
} finally{

try{rs4.close();}catch(Exception e){rs4 = null;}
try{st1.close();}catch(Exception e){st1 = null;}

}
return resultado;
} [/code]

intendi!!
o sql eh o mesmo!
tah dando outros erros aqui vo tentar colocar todas as consultas envolvidas nesse metodo com o preparedstatement
talvez de certo
vlw a ajuda cara