> 데이터 베이스 > MySQL 튜토리얼 > Java JDBC MySQL에서 \'ResultSet이 닫힌 후 작업이 허용되지 않음\'을 방지하는 방법은 무엇입니까?

Java JDBC MySQL에서 \'ResultSet이 닫힌 후 작업이 허용되지 않음\'을 방지하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-27 11:20:11
원래의
348명이 탐색했습니다.

How to Avoid

Java JDBC MySQL 연결에서 ResultSet 클로저 처리

Java JDBC를 사용하여 MySQL 데이터베이스로 작업할 때 ResultSet 닫기를 적절하게 관리하는 것이 중요합니다. 오류를 방지하려면 "ResultSet이 닫힌 후에는 작업이 허용되지 않습니다." 이 오류는 닫힌 ResultSet에서 작업을 수행하려고 할 때 발생하며, 이로 인해 예기치 않은 동작과 잘못된 쿼리 결과가 발생합니다.

문제 이해

제공된 코드에서 while(results.next()) 루프 내의 MySQLDonation 클래스에서 예외가 트리거됩니다. 실제 원인은 SELECT 쿼리(기부금 검색)와 후속 DELETE 쿼리(처리된 기부 기록 제거) 모두에 동일한Statement 개체(문)가 사용된다는 것입니다.

해결책: 각 쿼리에 대해 새 문 생성

문제를 해결하려면 쿼리를 실행할 때마다 새 문 개체를 생성해야 합니다. 이렇게 하면 후속 쿼리 실행으로 인해 이전 ResultSet이 자동으로 닫히지 않습니다. MySQLDatabase 클래스에 대한 변경 사항은 다음과 같습니다.

public ResultSet query(String query) throws SQLException {
    Statement statement = connection.createStatement();
    if (query.toLowerCase().startsWith("select")) {
        return statement.executeQuery(query);
    } else {
        statement.executeUpdate(query);
    }
    statement.close(); // Optional: May not be necessary as Resources are auto-closed
    return null;
}
로그인 후 복사

추가 고려 사항

Statement 개체 관리 외에도 메모리 방지를 위해 JDBC 리소스 처리에 대한 모범 사례를 따르는 것이 중요합니다. 누출을 방지하고 적절한 데이터베이스 연결 처리를 보장합니다. 다음은 몇 가지 추가 팁입니다.

  • 자동 리소스 관리를 위해 try-with-resources 블록을 사용하세요.
  • Statement, ResultSet 및 try-catch 블록 내의 연결 개체.
  • 핸들 예외가 있는 경우에도 예외를 정상적으로 처리하고 리소스를 해제합니다.

결론

쿼리마다 새 문을 생성하고 리소스 관리를 준수함으로써 모범 사례를 사용하면 "ResultSet이 닫힌 후 작업이 허용되지 않음" 오류를 방지하고 MySQL 쿼리가 올바르게 실행되도록 할 수 있습니다. 효율성과 안정성을 위해 데이터베이스 상호 작용을 지속적으로 최적화하는 것을 잊지 마세요.

위 내용은 Java JDBC MySQL에서 \'ResultSet이 닫힌 후 작업이 허용되지 않음\'을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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