집 >데이터 베이스 >MySQL 튜토리얼 >Java에서 \'ResultSet이 닫힌 후 작업이 허용되지 않음\' 예외를 처리하는 방법은 무엇입니까?
Java - "ResultSet이 닫힌 후 작업이 허용되지 않음" 예외 처리
MySQL 연결을 닫을 때 "작업이 허용되지 않음" 오류가 발생할 수 있습니다. ResultSet이 닫힌 후에 허용됩니다." 이는 JDBC가 쿼리 결과를 점진적으로 검색하여 연결이 닫히면 유효하지 않게 되는 ResultSet을 제공하기 때문에 발생합니다.
예외 원인
반환하는 ResultSet 귀하의 방법은 열린 연결에 의존합니다. finally 블록 내에서 연결을 닫으면 ResultSet을 사용할 수 없게 되어 예외가 발생합니다.
해결책
ResultSet을 반환하는 대신 다음을 사용하는 메서드를 생성하세요. 개체 또는 개체 컬렉션을 채우는 데 사용됩니다. 그런 다음 채워진 개체 또는 컬렉션을 반환합니다.
리팩터링된 코드
다음 코드는 메서드의 수정된 버전을 보여줍니다.
<code class="java">public static List<T> sqlquery(String query, RowMapper<T> rowMapper) throws SQLException { Connection connection = DriverManager.getConnection("databaseadress", "username", "password"); Statement st = connection.createStatement(); ResultSet rs = st.executeQuery(query); List<T> list = new ArrayList<>(); while (rs.next()) { list.add(rowMapper.mapRow(rs)); } try { rs.close(); st.close(); connection.close(); } catch (SQLException e) { log.info(e); } return list; }</code>
RowMapper 사용
RowMapper 인터페이스는 ResultSet의 각 행을 객체에 매핑하는 데 사용됩니다. 채우려는 객체를 기반으로 자신만의 RowMapper 구현을 생성할 수 있습니다.
이점
이 접근 방식은 다음과 같습니다.
결론
"ResultSet이 닫힌 후 작업이 허용되지 않음" 예외를 방지하려면 RowMapper를 사용하여 개체나 컬렉션을 채우고 ResultSet 대신 이를 반환하도록 코드를 수정하세요. 이 접근 방식을 사용하면 연결이 종료된 후에도 메소드가 계속 작동하도록 보장합니다.
위 내용은 Java에서 \'ResultSet이 닫힌 후 작업이 허용되지 않음\' 예외를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!