java.sql.SQLException:结果集开始前...如何消除此错误
java.sql.SQLException: Before start of result set... how remove this error
我使用 java 和 mysql 开发了员工薪资管理..
我想生成一个 PDF 单...
但是当我点击生成工资单按钮时……然后这个错误发生了……
我的生成单按钮代码在这里:
enter code here
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
String value = txt_firstname.getText();
String value0 = txt_surname.getText();
String value1 = txt_id.getText();
String value2 = txt_desig.getText();
String value3 = txt_dep.getText();
JFileChooser dialog = new JFileChooser();
dialog.setSelectedFile(new File(value +" "+ value0+"-Salary Slip"+".pdf"));
int dialogResult = dialog.showSaveDialog(null);
if (dialogResult==JFileChooser.APPROVE_OPTION){
String filePath = dialog.getSelectedFile().getPath();
try {
// TODO add your handling code here:
String sql ="select * from Deductions where emp_id = '"+value1+"'";
pst=conn.prepareStatement(sql);
rs=pst.executeQuery();
String val = rs.getString(5);
String reason = rs.getString(6);
rs.close();
pst.close();
String sq ="select * from Allowance where emp_id = '"+value1+"'";
pst=conn.prepareStatement(sq);
rs=pst.executeQuery();
int calcTotal = Integer.parseInt(txt_salary.getText());
float x = Float.valueOf(rs.getString(9));
int v = Integer.parseInt(val);
float total = calcTotal +x-v;
Document myDocument = new Document();
PdfWriter myWriter = PdfWriter.getInstance(myDocument, new FileOutputStream(filePath));
myDocument.open();
myDocument.add(new Paragraph("PAY SLIP",FontFactory.getFont(FontFactory.TIMES_BOLD,20,Font.BOLD )));
myDocument.add(new Paragraph(new Date().toString()));
myDocument.add(new Paragraph("-------------------------------------------------------------------------------------------"));
myDocument.add((new Paragraph("EMPLOYEE DETAILS",FontFactory.getFont(FontFactory.TIMES_ROMAN,15,Font.BOLD))));
myDocument.add((new Paragraph("Name of Employee: " +value + " "+value0,FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN))));
myDocument.add((new Paragraph("Designation: "+value2,FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN))));
myDocument.add((new Paragraph("Department: "+value3,FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN))));
myDocument.add(new Paragraph("-------------------------------------------------------------------------------------------"));
myDocument.add(new Paragraph("SALARY",FontFactory.getFont(FontFactory.TIMES_ROMAN,15,Font.BOLD)));
myDocument.add(new Paragraph("Basic Salary: $"+calcTotal,FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN)));
myDocument.add(new Paragraph("Overtime: "+rs.getString(2)+" Hours",FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN)));
myDocument.add(new Paragraph("Medical: $" +rs.getString(3),FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN)));
myDocument.add(new Paragraph("Bonus: $"+rs.getString(4),FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN)));
myDocument.add(new Paragraph("Other: $"+rs.getString(5),FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN)));
myDocument.add(new Paragraph("-------------------------------------------------------------------------------------------"));
myDocument.add(new Paragraph("DEDUCTION",FontFactory.getFont(FontFactory.TIMES_ROMAN,15,Font.BOLD)));
myDocument.add(new Paragraph("Deduction Details: "+reason,FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN)));
myDocument.add(new Paragraph("Total Deductions : $"+val ,FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN)));
myDocument.add(new Paragraph("-------------------------------------------------------------------------------------------"));
myDocument.add(new Paragraph("TOTAL PAYMENT",FontFactory.getFont(FontFactory.TIMES_ROMAN,15,Font.BOLD)));
myDocument.add(new Paragraph("Total Earnings: "+rs.getString(9),FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN)));
myDocument.add(new Paragraph("Net Pay : " +total,FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN)));
myDocument.add(new Paragraph("-------------------------------------------------------------------------------------------"));
myDocument.newPage();
myDocument.close();
JOptionPane.showMessageDialog(null,"Report was successfully generated");
}
catch(Exception e){
JOptionPane.showMessageDialog(null,e);
}
finally {
try{
rs.close();
pst.close();
}
catch(Exception e){
JOptionPane.showMessageDialog(null,e);
}
}
}
}
在使用 getString 等之前需要先调用 ResultSet#next()
:
String sql ="select * from Deductions where emp_id = '"+value1+"'";
pst=conn.prepareStatement(sql);
rs=pst.executeQuery();
if(rs.next()) { // here
String val = rs.getString(5);
String reason = rs.getString(6);
}
next()
调用每次将光标向前移动一行。 ResultSet 游标最初位于第一行之前;第一次调用 next 方法使第一行成为当前行;第二次调用使第二行成为当前行,依此类推。
我使用 java 和 mysql 开发了员工薪资管理.. 我想生成一个 PDF 单... 但是当我点击生成工资单按钮时……然后这个错误发生了…… 我的生成单按钮代码在这里:
enter code here
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
String value = txt_firstname.getText();
String value0 = txt_surname.getText();
String value1 = txt_id.getText();
String value2 = txt_desig.getText();
String value3 = txt_dep.getText();
JFileChooser dialog = new JFileChooser();
dialog.setSelectedFile(new File(value +" "+ value0+"-Salary Slip"+".pdf"));
int dialogResult = dialog.showSaveDialog(null);
if (dialogResult==JFileChooser.APPROVE_OPTION){
String filePath = dialog.getSelectedFile().getPath();
try {
// TODO add your handling code here:
String sql ="select * from Deductions where emp_id = '"+value1+"'";
pst=conn.prepareStatement(sql);
rs=pst.executeQuery();
String val = rs.getString(5);
String reason = rs.getString(6);
rs.close();
pst.close();
String sq ="select * from Allowance where emp_id = '"+value1+"'";
pst=conn.prepareStatement(sq);
rs=pst.executeQuery();
int calcTotal = Integer.parseInt(txt_salary.getText());
float x = Float.valueOf(rs.getString(9));
int v = Integer.parseInt(val);
float total = calcTotal +x-v;
Document myDocument = new Document();
PdfWriter myWriter = PdfWriter.getInstance(myDocument, new FileOutputStream(filePath));
myDocument.open();
myDocument.add(new Paragraph("PAY SLIP",FontFactory.getFont(FontFactory.TIMES_BOLD,20,Font.BOLD )));
myDocument.add(new Paragraph(new Date().toString()));
myDocument.add(new Paragraph("-------------------------------------------------------------------------------------------"));
myDocument.add((new Paragraph("EMPLOYEE DETAILS",FontFactory.getFont(FontFactory.TIMES_ROMAN,15,Font.BOLD))));
myDocument.add((new Paragraph("Name of Employee: " +value + " "+value0,FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN))));
myDocument.add((new Paragraph("Designation: "+value2,FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN))));
myDocument.add((new Paragraph("Department: "+value3,FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN))));
myDocument.add(new Paragraph("-------------------------------------------------------------------------------------------"));
myDocument.add(new Paragraph("SALARY",FontFactory.getFont(FontFactory.TIMES_ROMAN,15,Font.BOLD)));
myDocument.add(new Paragraph("Basic Salary: $"+calcTotal,FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN)));
myDocument.add(new Paragraph("Overtime: "+rs.getString(2)+" Hours",FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN)));
myDocument.add(new Paragraph("Medical: $" +rs.getString(3),FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN)));
myDocument.add(new Paragraph("Bonus: $"+rs.getString(4),FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN)));
myDocument.add(new Paragraph("Other: $"+rs.getString(5),FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN)));
myDocument.add(new Paragraph("-------------------------------------------------------------------------------------------"));
myDocument.add(new Paragraph("DEDUCTION",FontFactory.getFont(FontFactory.TIMES_ROMAN,15,Font.BOLD)));
myDocument.add(new Paragraph("Deduction Details: "+reason,FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN)));
myDocument.add(new Paragraph("Total Deductions : $"+val ,FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN)));
myDocument.add(new Paragraph("-------------------------------------------------------------------------------------------"));
myDocument.add(new Paragraph("TOTAL PAYMENT",FontFactory.getFont(FontFactory.TIMES_ROMAN,15,Font.BOLD)));
myDocument.add(new Paragraph("Total Earnings: "+rs.getString(9),FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN)));
myDocument.add(new Paragraph("Net Pay : " +total,FontFactory.getFont(FontFactory.TIMES_ROMAN,10,Font.PLAIN)));
myDocument.add(new Paragraph("-------------------------------------------------------------------------------------------"));
myDocument.newPage();
myDocument.close();
JOptionPane.showMessageDialog(null,"Report was successfully generated");
}
catch(Exception e){
JOptionPane.showMessageDialog(null,e);
}
finally {
try{
rs.close();
pst.close();
}
catch(Exception e){
JOptionPane.showMessageDialog(null,e);
}
}
}
}
在使用 getString 等之前需要先调用 ResultSet#next()
:
String sql ="select * from Deductions where emp_id = '"+value1+"'";
pst=conn.prepareStatement(sql);
rs=pst.executeQuery();
if(rs.next()) { // here
String val = rs.getString(5);
String reason = rs.getString(6);
}
next()
调用每次将光标向前移动一行。 ResultSet 游标最初位于第一行之前;第一次调用 next 方法使第一行成为当前行;第二次调用使第二行成为当前行,依此类推。