2013-07-15 7 views
0

이 문제에 대해 살펴 보았으므로 명령문이 여러 ResultSet을 얻으려고 할 때 문제가 발생하는 것으로 보입니다.왜 java.sql.SQLException이 발생합니까? ResultSet을 닫은 후 작업을 수행 할 수 없습니다.

그러나 executeUpdate가 int를 반환하더라도 다음 코드에서 예외가 발생합니다.

ResultSet resultsRS = statement.executeQuery("select distinct snum from shipments where quantity >= 100"); 
int rowCount=0; 

while(resultsRS.next()){ 
    statement.executeUpdate("UPDATE suppliers SET status = status + 5 WHERE snum = "+"\""+resultsRS.getString(1)+"\""); 
    rowCount++; 
} 

예외가 발생하면 한 번 실행됩니다. 어떻게이 문제를 해결할 수 있습니까?

+0

더 많은 코드가 관여하는 것으로 보인다. 오류는 resultsRS가 읽으 려 할 때 닫혔다 고 말합니다. – Thilo

+0

이 문제를 해결하려면 단일 쿼리에서이 작업을 수행하는 것이 좋습니다. – Nuoji

답변

2

Statement 인터페이스의 모든 실행 메소드는 암시 적으로 Statment의 현재 ResultSet을 닫습니다. See docs 그래서 임시 배열에 resultSet 데이터를 저장하고 루프를 통과해야합니다.

또는 executeUpdate에 다른 명령문을 사용해보십시오. 이 같은

시도 뭔가 :

ArrayList<String> tmp = new ArrayList<String>(); 
    while(resultsRS.next()){ 
     tmp.add(resultsRS.getString(1)); 
    } 

    for (String s: tmp) { 
     statement.executeUpdate("UPDATE suppliers SET status = status + 5 WHERE snum = "+"\""+s+"\""); 
     rowCount++; 
    } 
+0

코드를 작성해 주시겠습니까? –

+1

@KelseyAbreu 가장 간단한 방법은 업데이트를위한 새로운 문장을 만드는 것입니다. 그래서 당신은'statement2.executeUpdate ("UPDATE supplier SET status = status + 5 WHERE snum ="+ "\" "+ resultsRS.getString (1) +"\ "")와 같은 것을 가지고 있습니다. – Nuoji

+0

네, 고마워요. 나는 지금 당장 그것을했다. 큰 도움! –