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 중국어 웹사이트의 기타 관련 기사를 참조하세요!