JDBC에서 \'ResultSet이 닫힌 후 작업이 허용되지 않습니다\'가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Linda Hamilton
풀어 주다: 2024-11-26 16:32:10
원래의
212명이 탐색했습니다.

Why Does

MySQL Result Set이 닫힌 후에는 작업이 허용되지 않습니다.

JDBC를 사용하여 데이터베이스와 상호 작용할 때 ResultSet 객체를 주의해서 처리하는 것이 중요합니다. "ResultSet이 닫힌 후에는 작업이 허용되지 않습니다."와 같은 예외를 피하세요. 이 오류는 이미 닫힌 ResultSet에서 작업을 수행하려고 할 때 발생합니다.

예외 이해

예외는 ResultSet이 닫힌 후 next() 메서드를 사용합니다. 이는 ResultSet을 닫으면 내부 커서를 포함한 해당 리소스가 해제되어 추가 작업에 사용할 수 없게 되기 때문에 발생합니다.

닫힌 결과 세트의 원인

  • 명시적으로 호출 ResultSet의 close() 메소드
  • 동일한 명령문에서 쿼리 재실행 object
  • Statement 개체를 사용하여 여러 ResultSet 생성

제공된 코드의 해결 방법

제공된 코드의 오류는 기부 테이블을 순환하는 동안 MySQLDonation 클래스입니다. SELECT 쿼리에서 얻은 ResultSet은 후속 DELETE 쿼리에 대해 문이 다시 실행될 때 닫힙니다.

이 문제를 해결하려면 쿼리 실행 단계와 결과 처리 단계를 분리하세요.

// In MySQLDatabase class
private void handleDonation(Client client, int creditamount) {
    try (Statement statement = getConnection().createStatement()) {
        // Execute DELETE query with new Statement
        statement.executeUpdate(String.format("DELETE ..."));
    }
}
로그인 후 복사

각 쿼리에 대해 새 명령문을 생성하면 쿼리가 완료될 때까지 ResultSet이 열린 상태로 유지됩니다. 완료되었습니다.

추가 참고 사항

  • try-with-resources 블록을 사용하여 문과 결과 집합을 자동으로 닫는 것을 고려해 보세요.
  • 필요한 경우 여러 ResultSet에 대해 반복하려면 다른 명령문 개체에서 실행하세요.
  • ResultSet 처리 모범 사례에 대한 JDBC 문서입니다.

위 내용은 JDBC에서 \'ResultSet이 닫힌 후 작업이 허용되지 않습니다\'가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿