gpt4 book ai didi

java - "ORA-01008: not all variables bound"错误

转载 作者:搜寻专家 更新时间:2023-10-30 20:58:39 26 4
gpt4 key购买 nike

我正在使用以下方法通过 jdbc 计算工资单,但“ORA-01008:并非所有变量都绑定(bind)”错误未被删除。

有什么想法吗?

我正在使用以下代码

public double getPayroll(){
ResultSet rs = null;
ResultSet rs1 = null;
ResultSet rs2 = null;

Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = getDBConnection();
double dailyPay=0,basicPay=0,payroll2=0;
int houseRent=0,convAllow=0,noOfPresents=0,empId=0;
String q = "select e_id from employee";
pstmt = conn.prepareStatement(q);
rs = pstmt.executeQuery();
while (rs.next()) {
empId=rs.getInt(1);
String q1 = "select count(att_status) from attendance where att_status='p'";
pstmt = conn.prepareStatement(q1);
rs1 = pstmt.executeQuery(q1);
while(rs1.next()){
noOfPresents=rs1.getInt(1);
String q2 = "select e_salary,e_house_rent,e_conv_allow from employee where e_id=?";
pstmt = conn.prepareStatement(q2);
pstmt.setInt(1,empId);
rs2 = pstmt.executeQuery(q2);
while(rs2.next()){
dailyPay=rs2.getInt(1)/22;
houseRent=rs2.getInt(2);
convAllow=rs2.getInt(3);
basicPay=dailyPay*noOfPresents;
payroll2+=basicPay+houseRent+convAllow;
}
}
}
return payroll2;
}catch (Exception e) {
e.printStackTrace();
return 0.0;
} finally {
try {
rs.close();
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

最佳答案

你的问题在这里:

rs2 = pstmt.executeQuery(q2);

您是在告诉 PreparedStatement 执行 SQL q2,而不是执行之前准备好的 SQL。这应该只是:

rs2 = pstmt.executeQuery();

这是一个相当常见的错误,主要是由于 java.sql.Statement 及其子类型的错误类设计造成的。

正如@RMT 指出的,您在这里犯了同样的错误:

rs1 = pstmt.executeQuery(q1);

这无关紧要,因为 q1 中没有占位符,所以 SQL 照原样执行。但是,它仍然是错误的。

最后,您应该考虑在第一个 PreparedStatement 上调用 close(),然后再将 pstmt 变量重新分配给另一个变量。如果你不这样做,你就有泄漏的风险。

关于java - "ORA-01008: not all variables bound"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6469753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com