>데이터 베이스 >MySQL 튜토리얼 >JDBC를 사용할 때 Java 코드에서 \'결과 세트가 닫힌 후 작업이 허용되지 않음\' 오류가 발생하는 이유는 무엇입니까?

JDBC를 사용할 때 Java 코드에서 \'결과 세트가 닫힌 후 작업이 허용되지 않음\' 오류가 발생하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-02 03:56:03360검색

Why does my Java code throw a

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.