> 데이터 베이스 > MySQL 튜토리얼 > 내 Java JDBC MySQL 코드에서 \'ResultSet이 닫힌 후 작업이 허용되지 않음\'이 발생하는 이유는 무엇입니까?

내 Java JDBC MySQL 코드에서 \'ResultSet이 닫힌 후 작업이 허용되지 않음\'이 발생하는 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-27 13:56:09
원래의
273명이 탐색했습니다.

Why Does My Java JDBC MySQL Code Throw

Java JDBC MySQL 예외: "ResultSet이 닫힌 후 작업이 허용되지 않습니다."

이 오류는 닫힌 ResultSet에서 작업을 시도할 때 일반적으로 발생합니다. 제공된 코드를 분석하여 예외의 원인을 파악해 보겠습니다.

데이터베이스 초기화

MySQLDatabase 클래스는 connect() 메서드에서 데이터베이스에 대한 연결을 설정합니다. 명령문 변수는 Connection.createStatement()를 사용하여 초기화됩니다. 그러나 이 명령문은 선택 및 업데이트 쿼리를 포함한 모든 데이터베이스 작업에서 공유됩니다.

기부 처리

MySQLDonation 클래스는 'donations' 테이블을 순환하며 기부를 처리합니다. 기록. while 루프는 쿼리("SELECT * FROM gieli436_purchases.donations") 문에서 얻은 ResultSet을 반복합니다.

예외 원인

문을 사용했기 때문에 오류가 발생합니다. ResultSet을 검색하는 것은 이전 ResultSet을 닫는 삭제 쿼리를 실행하는 데에도 사용됩니다. 결과적으로 닫힌 ResultSet에 대한 후속 next() 호출은 "ResultSet 닫힌 후 작업이 허용되지 않음" 예외를 발생시킵니다.

해결책

이 문제를 해결하려면 다음을 생성하십시오. 각 쿼리 실행에 대한 새 문. 명령문을 제거하도록 MySQLDatabase 클래스를 수정합니다 = Connection.createStatement(); 연결()에서. 클래스에 있는 문의 모든 인스턴스를 Connection.createStatement()로 바꿉니다.

수정

// MySQLDatabase class
// Remove statement = connection.createStatement();
// Replace statement with connection.createStatement()

// MySQLDonation class
// Remove private variable statement

// Query execution
results = connection.createStatement().executeQuery("SELECT * FROM gieli436_purchases.donations");

// Delete execution
connection.createStatement().executeUpdate(String.format("DELETE FROM gieli436_purchases.donations WHERE donations.username='%s' LIMIT 1", client.playerName.replaceAll(" ", "_")));
로그인 후 복사

각 쿼리에 대해 별도의 문을 생성하면 ResultSet이 처리 중에도 열려 있으므로 예외가 발생하지 않습니다.

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

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