Можем ли мы использовать два запроса, используя подготовленный оператор в одном методе - PullRequest
0 голосов
/ 20 мая 2011

Можем ли мы использовать два запроса в одном методе при использовании подготовленного оператора, я пробовал использовать это, но приближается недопустимое исключение имени столбца.

Мой фрагмент кода выглядит следующим образом.

    public double getPayroll(){
            ResultSet rs = null;
            ResultSet rs2 = null;
            Connection conn = null;
            PreparedStatement pstmt = null;
            try {
              conn = getDBConnection();
              int employeeId;
              String q1 = "select e_salary,e_house_rent,e_conv_allow,e_id 
                            from employee";
              pstmt = conn.prepareStatement(q1);
              rs = pstmt.executeQuery();
              double dailyPay=0,basicPay=0,payroll2=0;
              int houseRent=0,convAllow=0;
              while (rs.next()) {
                dailyPay = rs.getInt(1)*.03;
                houseRent=rs.getInt(2);
                convAllow=rs.getInt(3);
                employeeId=rs.getInt(4);
              }
              String q2="select att_status from attendance where 
                            e_id=employeeId";
              pstmt = conn.prepareStatement(q2);
              rs2 = pstmt.executeQuery();
              int noOfPresents = 0;
              while(rs2.next()){
                  noOfPresents+=1;
             }    
             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();
              }
            }
}

1 Ответ

1 голос
/ 20 мая 2011

Ваша проблема в том, что sql в q2 предполагает наличие столбца с именем employeeId, но я подозреваю, что вы хотите вставить значение переменной employeeId.

Измените его на

select att_status from attendance where e_id=?

Затем выполните

pstmt.setString(1, employeeId);

перед выполнением pstmt.executeQuery ();

...