当前位置: 首页 > 面试题库 >

“ ORA-01008:并非所有变量都绑定”错误

慕冠宇
2023-03-14
问题内容

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

有什么想法吗?

我正在使用以下代码

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();

这是一个相当普遍的错误,主要是由于糟糕的class设计java.sql.Statement 及其子类型引起的。

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

rs1 = pstmt.executeQuery(q1);

没什么关系,因为中没有占位符q1,因此SQL按原样执行。但是,这仍然是错误的。

最后,在将变量重新分配给另一个变量之前,您应该考虑调用close()first
。如果不这样做,可能会导致泄漏。PreparedStatement``pstmt



 类似资料:
  • 问题内容: 这是我第一次与Oracle打交道,并且很难理解为什么会收到此错误。 我在查询的where子句中使用带有以下代码的Oracle ODT.NET w / C#: 并且我像这样添加参数值: 当我运行此查询时,服务器返回: 如果我注释掉“ AND(....)”行中的任何一行,则查询成功完成。 如果仅使用两个参数而不使用三个参数进行查询,为什么查询会正常运行?我收到的错误甚至没有任何意义 问题答

  • 我正在尝试通过将图像转换为base 64字符串将图像上传到我的Android应用程序中的服务器。在这种情况下,当我尝试上传图像时,我的图像质量会大大降低并且非常模糊。你能帮我克服这个问题吗? 我要换氧气。inSampleSize=10它在摩托罗拉、三星和联想都能很好地工作,但并非适用于所有设备。请告诉我为什么会这样。。 将位图转换为base64 任何帮助都将不胜感激

  • 为什么在Oracle DB中出现此错误? cx_Oracle。ORA-01036:非法变量名称/数字

  • 我已经创建了一个API,希望将数据插入oracle数据库。但我收到一条错误消息“error:ORA-01036:非法变量名/编号”。我不知道我犯了什么错误。希望能帮我解决这个问题。先谢谢你。 [错误:ORA-01036:非法变量名/编号]{errorNum:1036,偏移量:0}

  • Rust 通过静态类型确保类型安全。变量绑定可以在声明变量时标注类型。不过在多数情况下,编译器能够 从字面内容推导出变量的类型,大大减少了标注类型的负担。 使用 let 绑定操作可以将值(像具体数据)绑定到变量中。 fn main() { let an_integer = 1u32; let a_boolean = true; let unit = (); // 将

  • 变量绑定默认是不可变的,但加上 mut 修饰语后变量就可以改变。 fn main() { let _immutable_binding = 1; let mut mutable_binding = 1; println!("Before mutation: {}", mutable_binding); // 正确代码 mutable_binding += 1