/ / Erro mostrando conjunto de resultados fechado. como removê-lo? - java

Erro ao mostrar o conjunto de resultados fechado. como removê-lo? - java

Tenho trabalhado neste código há muito tempo.é um código para geração de comprovante de salário para o sistema de gerenciamento de folha de pagamento de funcionários usando Java Netbeans IDE. Esse código extrai do banco de dados os dados referentes às deduções e abonos feitos pelo funcionário. Mas, ele continua me dando o erro de fechamento do conjunto de resultados, apesar de ter fechado o conjunto de resultados antes de usá-lo novamente. Você pode me ajudar a corrigir isso ..

o código é fornecido aqui:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {


String value1 = txt_id.getText();
String value2 = txt_firstname.getText();
String value3 = txt_surname.getText();
String value4 = txt_design.getText();
String value5 = txt_dept.getText();

JFileChooser chooser = new JFileChooser();
chooser.setSelectedFile(new File(value2 +" "+value3+"-SalarySlip.pdf"));
int dialogResult = chooser.showSaveDialog(null);
if(dialogResult==JFileChooser.APPROVE_OPTION)
{
String filePath = chooser.getSelectedFile().getPath();

try
{
String sql = "select * from Deductions where emp_id =""+value1+""";
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
String deduction = rs.getString(3);
String reason = rs.getString(4);
rs.close();
pst.close();

String sq = "select * from Allowance where emp_id = ""+value1+""";

pst = conn.prepareStatement(sq);
rs = pst.executeQuery();

int sal = Integer.parseInt(txt_salary.getText());
float total_allowance = Float.valueOf(rs.getString(8));
float total_deduction =Float.valueOf(deduction);
float total = (sal+total_allowance)-total_deduction;


Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream(filePath));
document.open();

document.add(new Paragraph("PAY SLIP",FontFactory.getFont(FontFactory.TIMES_ROMAN,30,Font.BOLD,BaseColor.BLACK)));
document.add(new Paragraph(new Date().toString()));
document.add(new Paragraph("-----------------------------------------------------------------------------------"));


document.add(new Paragraph("EMPLOYEE DETAILS" ,FontFactory.getFont(FontFactory.TIMES_ROMAN,20,Font.BOLD,BaseColor.BLACK)));
document.add(new Paragraph( "Name of the Employee :" + value2 +" "+value3,FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN,BaseColor.BLACK)));
document.add(new Paragraph( "Department :" + value5,FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN,BaseColor.BLACK)));
document.add(new Paragraph( "Designation :" + value4,FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN,BaseColor.BLACK)));
document.add(new Paragraph("-----------------------------------------------------------------------------------"));

document.add(new Paragraph("SALARY" ,FontFactory.getFont(FontFactory.TIMES_ROMAN,20,Font.BOLD,BaseColor.BLACK)));
document.add(new Paragraph( "Over Time :" + rs.getString(1),FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN,BaseColor.BLACK)));
document.add(new Paragraph( "Medical :" + rs.getString(2),FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN,BaseColor.BLACK)));
document.add(new Paragraph( "Bonus :" + rs.getString(3),FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN,BaseColor.BLACK)));
document.add(new Paragraph( "Other :" + rs.getString(4),FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN,BaseColor.BLACK)));
document.add(new Paragraph("-----------------------------------------------------------------------------------"));

document.add(new Paragraph("DEDUCTION" ,FontFactory.getFont(FontFactory.TIMES_ROMAN,20,Font.BOLD,BaseColor.BLACK)));
document.add(new Paragraph( "Amount Deducted : Rs. "+ total_deduction , FontFactory.getFont(FontFactory.TIMES_ROMAN,15,Font.PLAIN,BaseColor.BLACK)));
document.add(new Paragraph( "Deduction Details :" + reason,FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN,BaseColor.BLACK)));
document.add(new Paragraph("-----------------------------------------------------------------------------------"));

document.add(new Paragraph("TOTAL PAYMENT" ,FontFactory.getFont(FontFactory.TIMES_ROMAN,20,Font.BOLD,BaseColor.BLACK)));
document.add(new Paragraph( "Total Earnings : Rs. " + total_allowance,FontFactory.getFont(FontFactory.TIMES_ROMAN,15,Font.PLAIN,BaseColor.BLACK)));
document.add(new Paragraph( "Net Pay :" + total,FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN,BaseColor.BLACK)));
document.add(new Paragraph("-----------------------------------------------------------------------------------"));

document.newPage();
document.close();




}catch(Exception e)
{
JOptionPane.showMessageDialog(null,e);
}
finally
{
try
{

}catch( Exception e)
{

}
}






}

Respostas:

1 para resposta № 1

Você deve usar try with resource para autoclose Statement ou ResultSet.

Por exemplo:

try (PreparedStatement ps = conn.prepareStatement(sql)){

try(ResultSet rs = pst.executeQuery()){
.....
}

}
catch(SQLException e){
....
}

0 para resposta № 2

Você fechou o conjunto de resultados como rs.close (), apenas remova-o de lá e também pst.close do bloco try, pois está usando try, catch, coloque essas duas linhas de código no bloco finally.


0 para resposta № 3

Você não precisa fechar sua declaração e ResultSet antes de usá-los novamente.

Por padrão, apenas um objeto ResultSet porO objeto de instrução pode ser aberto ao mesmo tempo. Quando você usa o ResultSet para outra consulta, ele fecha a existente internamente e cria uma nova. O primeiro objeto ResultSet não estará acessível.

Você pode fechar todas as conexões existentes no finalmente quadra:

try{
//your code here
}
catch{
//your code here
}
finally{
rs.close();
pst.close();
conn.close();
}