我一直在研究这段代码。我是一个代码,用于使用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)
{
}
}
}
答案 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();
}