집 >데이터 베이스 >MySQL 튜토리얼 >JDBC를 사용할 때 Java 코드에서 \'결과 세트가 닫힌 후 작업이 허용되지 않음\' 오류가 발생하는 이유는 무엇입니까?
JDBC ResultSet 오류: "ResultSet이 닫힌 후 작업이 허용되지 않음"
Java에서 JDBC를 사용하여 데이터베이스에 연결하고 다음을 통해 쿼리를 실행합니다. 연결이 조기에 종료되면 ResultSet에서 오류가 발생할 수 있습니다.
원인:
JDBC ResultSet은 쿼리 결과를 완전히 표현하지 않습니다. 대신, 데이터베이스에 대한 실시간 연결을 제공하여 결과를 행 단위로 가져올 수 있습니다. 연결이 닫히면 ResultSet의 연결이 끊어지고 무효화됩니다.
오류 메시지:
java.sql.SQLException: Operation not allowed after ResultSet closed
코드 샘플:
다음 코드는 오류를 보여줍니다.
<code class="java">ResultSet rs = null; Connection connection = null; Statement st = null; try { connection = DriverManager.getConnection("databaseadress","username","password"); st = connection.createStatement(); rs = st.executeQuery(query); } catch (...) {} // exception handling finally { if (rs != null) rs.close(); if (st!= null) st.close(); if (connection != null) connection.close(); }</code>
이 코드에서는 연결이 닫힌 후에도 rs가 finally 블록 외부에서 계속 사용되고 있기 때문에 오류가 발생합니다.
해결책:
이 오류를 방지하려면 데이터베이스 연결 범위 내의 ResultSet을 기반으로 임시 개체 또는 컬렉션을 채워야 합니다. 연결이 닫히면 임시 개체 또는 컬렉션을 문제 없이 반환하거나 사용할 수 있습니다.
재구성된 코드:
<code class="java">public static <T> List<T> sqlquery (String query, RowMapper<T> rowMapper) throws SQLException { Connection connection = null; Statement st = null; ResultSet rs = null; connection = DriverManager.getConnection("databaseadress","username","password"); st = connection.createStatement(); rs = st.executeQuery(query); List<T> list = new ArrayList<>(); while (rs.next()) { list.add(rowMapper.mapRow(rs)); } if (rs != null) rs.close(); if (st != null) st.close(); if (connection != null) connection.close(); return list; }</code>
위 내용은 JDBC를 사용할 때 Java 코드에서 \'결과 세트가 닫힌 후 작업이 허용되지 않음\' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!