显示结果集已关闭时出错。怎么删除它?

时间:2016-12-13 06:54:22

标签: java

我一直在研究这段代码。我是一个代码,用于使用java netbeans IDE为员工薪资管理系统生成工资单。这段代码从数据库中提取有关员工扣除和津贴的数据。   但是,尽管在再次使用结果集之前关闭了结果集,它仍继续给我结果集关闭错误。 能帮我纠正一下吗..

代码在这里给出:

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)
            {

            }
        }






    }

3 个答案:

答案 0 :(得分:1)

您必须使用try with resource for autoclose Statement或ResultSet。

例如:

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

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

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

答案 1 :(得分:0)

您已将结果集关闭为rs.close(),只需从那里删除它以及从try块中删除pst.close,因为您正在使用try,catch请将这两个代码行放在finally块中。

答案 2 :(得分:0)

在再次使用之前,无需关闭Statement和ResultSet。

默认情况下,每个Statement对象只能同时打开一个ResultSet对象。当您将ResultSet用于另一个查询时,它将在内部关闭现有查询并创建一个新查询。第一个ResultSet对象将无法访问。

您可以关闭 finally 块中的所有现有连接:

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