A pergunta é um pouco confusa, mas o problema é literalmente esse.
No meu projeto JavaWeb, trabalho com DAO, e possuo um metodo que faz uma busca no banco buscando os dados de uma determinada tabela, e quando estou recuperando os valores do resultset, jogando pra dentro de um objeto, tenho a necessidade de chamar um outro método (passando como parâmetros alguns valores do resultado do resultset) este método retorna um valor na qual eu seto para um atributo desse objeto.
O problema é que quando vai executar esse método, ao tentar abrir uma nova conexão com o banco, a conexão que estava antes é perdida e por consequência essa nova nem sequer é aberta
ERRO: java.sql.SQLException: You can’t operate on a closed Connection!!!
OBS.: Ja tentei passar a conexão como parâmetro, mas da na mesma
Código
public Collection geraRelContraCheque(int idRecibo) {
Vector v = new Vector();
ResultSet rs = null;
PreparedStatement pstmt = null;
ConexaoBanco conn = new ConexaoBanco();
String sql = " SELECT o.nome AS nome_orgao, " +
" o.cnpj, o.codigo AS codigo_orgao, " +
" r.mes, r.ano, o.logotipo as logotipo, " +
" r.tipo, c.nome AS nomeCargo, c2.nome AS nomeCargoOriginal, " +
" s.nome AS nomesecao, " +
" b.codigo || ' - ' || b.nome AS banco, " +
" p.cpf, f.matricula, f.ehConcursado, f.dataPosse, " +
" p.nome AS nomep, c.cbo, " +
" p.nascfundacao, r.valorliquido AS liquido, " +
" r.valordescontos AS totaldesc, r.valorproventos, " +
" t.descricao AS nometipofolha, rhvinculos.dataadmissao, " +
" rhvinculosddm.cccontabancaria, rhvinculosddm.salario, " +
" rhvinculosddm.secao, tipoAdPub.descricao AS tipoAdmissaoNome " +
" FROM recibos r " +
" LEFT JOIN rhvinculos ON rhvinculos.id = r.idvinculo " +
" JOIN funcionarios f ON rhvinculos.funcionario = f.matricula " +
" LEFT JOIN tipo_admissao_publico tipoAdPub ON tipoAdPub.codigo = rhvinculos.tipoadmissaopublico " +
" INNER JOIN rhvinculosddm ON rhvinculosddm.idvinculo = rhvinculos.id AND " +
" rhvinculosddm.ano = r.ano AND " +
" rhvinculosddm.mes = r.mes " +
" LEFT JOIN orgaos o ON o.codigo = rhvinculos.orgaoregistrotribunal " +
" LEFT JOIN cargos c ON rhvinculosddm.codigocargo = c.codigo " +
" LEFT JOIN cargos c2 ON f.cargoAdmissao = c2.codigo " +
" LEFT JOIN secoes s ON rhvinculosddm.secao = s.id " +
" LEFT JOIN agencias_bancarias ab ON rhvinculosddm.cccontabancaria = ab.id " +
" LEFT JOIN bancos b ON ab.banco = b.codigo " +
" LEFT JOIN pessoas p ON f.codigopessoa = p.codigo " +
" LEFT JOIN tipos_folhas t ON r.tipo = t.codigo where r.id = ?";
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, idRecibo);
rs = pstmt.executeQuery();
if (rs.next()) {
Rel_ContraCheque rel = new Rel_ContraCheque();
rel.setId(idRecibo);
rel.setNomeOrgao(rs.getString("nome_orgao"));
rel.setTipoAdmissaoNome(rs.getString("tipoAdmissaoNome"));
rel.setCodigoOrgao(rs.getInt("codigo_orgao"));
rel.setInscricaoOrgao(rs.getString("cnpj"));
rel.setNomeCargo(rs.getString("nomeCargo"));
rel.setNomeCargoOriginal(rs.getString("nomeCargoOriginal"));
rel.setNomeSecao(rs.getString("nomeSecao"));
rel.setDataPosse(rs.getDate("dataPosse"));
if (rs.getInt("tipo") == 1) {
rel.setRefStr(UteisData.getMonth(rs.getInt("mes")) + "/" + rs.getInt("ano"));
} else {
rel.setRefStr(rs.getString("nometipofolha") + " " + UteisData.getMonth(rs.getInt("mes")) + "/" + rs.getInt("ano"));
}
if (rs.getString("ehConcursado").equals("S")){
rel.setNomeDataPosse("Data da Posse: " + new Uteis().constStr("\u00A0", 10) + UteisData.converteData(rel.getDataPosse(), UteisData.FormatData.DATA_SIMPLES));
}else{
rel.setNomeDataPosse("");
}
rel.setBanco(rs.getString("banco"));
rel.setConta(rs.getString("CCcontaBancaria"));
rel.setCpf(rs.getString("cpf"));
rel.setDtAdmissao(rs.getDate("dataadmissao"));
rel.setMatricula(rs.getInt("matricula"));
rel.setNome(rs.getString("nomep"));
rel.setCbo(rs.getString("cbo"));
rel.setSecao(rs.getString("secao"));
rel.setDataNascFundacao(rs.getDate("nascfundacao"));
rel.setLiquido(rs.getDouble("liquido"));
rel.setTotalDesc(rs.getDouble("totalDesc"));
rel.setTotalVenc(rs.getDouble("valorproventos"));
rel.setSalBase(rs.getDouble("salario"));
rel.setMes(rs.getInt("mes"));
Integer orgao = rs.getInt("codigo_orgao");
Date dataNascimento = rs.getDate("nascfundacao");
Integer mes = rs.getInt("mes");
Blob blob = rs.getBlob("logotipo");
if (blob != null) {
byte[] bin = blob.getBytes(1, (int) blob.length());
ByteArrayInputStream stream = new ByteArrayInputStream(bin);
rel.setLogotipo(stream);
}
rel.setMensagem(this.getInfoMensagem(dataNascimento, mes,conn));
**//CHAMADA DO METODO QUE CAUSA O PROBLEMA**
rel.setMargemConsignavel(this.calculaMargemConsignavel(idRecibo, rel.getTotalVenc(), conn));
v.add(rel);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
UteisDataBase.liberarRecursosBD(rs, pstmt, conn);
}
return v;
}
[/details][details=Método que causa o problema]
public Double calculaMargemConsignavel(Integer idRecibo, Double salarioBruto, ConexaoBanco conn) {
Double resposta = null;
Double margemJaConsignada = null;
Double margemQueAindaPodeSerConsignada = null;
Double margemConsignavel = null;
Double valorMaximoConsignavel = null;
ResultSet rs = null;
String sql = "";
PreparedStatement pstmt = new PreparedStatement();
sql = "SELECT pf.margemConsignavel "
+ " from PARAMETROS_FOLHA PF";
try {
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
if (rs.next()) {
margemConsignavel = rs.getDouble("margemConsignavel");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
UteisDataBase.liberarRecursosBD(rs, pstmt);
}
valorMaximoConsignavel = salarioBruto * margemConsignavel / 100;
sql = "select sum(re.valor) as valor "
+ " from eventos e, RECIBOS_EVENTOS RE "
+ " where e.tipodesconto = 3 and RE.CODIGOEVENTO=E.CODIGO and re.idrecibo = ?";
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, idRecibo);
rs = pstmt.executeQuery();
if (rs.next()) {
margemJaConsignada = rs.getDouble("valor");
margemQueAindaPodeSerConsignada = valorMaximoConsignavel - margemJaConsignada;
resposta = margemQueAindaPodeSerConsignada;
}
return resposta;
} catch (Exception e) {
e.printStackTrace();
return resposta;
} finally {
UteisDataBase.liberarRecursosBD(rs, pstmt);
}
}
Se puderem me dar uma luz, ficarei grato