2011-10-09 4 views
0

그래서 첫 번째 쿼리의 결과가 한 번만 업데이트되는 문제가 있습니다. 업데이트 문은 한 번만 실행됩니다.

Statement statement = con1.createStatement(); 
    ResultSet qResult = statement.executeQuery("select e.Grade, e.StudentID, s.StudentID, s.Classification, s.CreditHours, s.GPA"+ " " + 
          "from Enrollment e, Student s" + " " + 
          "where e.StudentID = s.StudentID"); 

    double grade = 0.00; 
    int tCredits = 0; 
    float newGpa = 0; 
    String nClass = ""; 
    PreparedStatement statement2; 
    int rowCount = 0; 
    String sId = ""; 
    //loop results 
    while(qResult.next()) 
    { 
     sId = qResult.getString(2); 
     //1 parse grade - convert to double and save to variable 
     grade = parseGrade(qResult.getString(1)); 
     //2 save Tcredit hours to var 
     tCredits = qResult.getInt(5); 
     //3 calc new GPA = ((gpa * tCred)+ (3 * grade))/(tCred +3) 
     newGpa = (float) (((qResult.getDouble(6) * tCredits) + (3 * grade))/(tCredits + 3)); 
     //4 add 3 to Tcredit hours 
     tCredits = tCredits + 3; 
     //5 check tCredit hours and update classification 
     nClass = getNewClass(tCredits); 

     //6 Update Tables!! 
     statement = con1.createStatement(); 
     rowCount += statement.executeUpdate("update Student" + " " + 
           "set Classification=" + "'" + nClass + "'" + ", GPA=" + newGpa +", CreditHours=" + tCredits + " " + 
           "where StudentID=" + qResult.getString(2)); 

    } 
    System.out.println("rows Changed:::: " + rowCount); 
    //statement.close(); 

} 

나는 내 선택 쿼리의 결과를 횡단 각 결과를 업데이트하려합니다. 나는 여러 번 수업에 등록한 학생이 여러 명이므로 두 번 이상 반납해야합니다.

그러나 학점은 등록 테이블에있는 모든 학생에게만 업데이트됩니다 (+3).

도와주세요, 감사합니다!

답변

0

JDBC는 이러한 테이블을 동시에 변경하려고 시도하는 동안 여러 테이블의 테이블 큐를 허용하지 않습니다.

1

결과 집합 Updatable을 사용해야합니다.

+0

메신저 아직도 조금 혼란 스럽네요. 그래서 수정하는 것이 모두 문장 = con1.createStatement (ResultSet.CONCUR_UPDATABLE, ResultSet.TYPE_SCROLL_SENSITIVE)입니다. – Aziz

관련 문제