> 데이터 베이스 > MySQL 튜토리얼 > Java에서 `java.sql.SQLException: ResultSet이 닫힌 후 작업이 허용되지 않음`을 방지하는 방법은 무엇입니까?

Java에서 `java.sql.SQLException: ResultSet이 닫힌 후 작업이 허용되지 않음`을 방지하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-27 03:09:10
원래의
584명이 탐색했습니다.

How to Avoid `java.sql.SQLException: Operation not allowed after ResultSet closed` in Java?

ResultSet 반환

데이터베이스를 쿼리할 때 반환된 결과를 효과적으로 처리해야 합니다. 데이터베이스를 쿼리하는 메서드에서 ResultSet을 반환하려고 할 때 한 가지 일반적인 문제가 발생합니다. 그러나 ResultSet을 직접 반환하면 리소스 누수 및 부적절한 리소스 관리가 발생할 수 있습니다.

"java.sql.SQLException: ResultSet 닫힌 후 작업이 허용되지 않음" 오류는 메서드가 작동하기 전에 ResultSet 객체가 닫혔음을 나타냅니다. 돌려보내세요. 이 문제를 해결하려면 ResultSet을 Javabean 컬렉션에 매핑하고 대신 반환하는 것이 좋습니다. 이 접근 방식을 사용하면 사용 후 ResultSet가 자동으로 닫혀 리소스 누출을 방지할 수 있습니다.

ResultSet을 Javabean 목록에 매핑하는 방법의 예가 아래에 제공됩니다.

public List<Biler> list() throws SQLException {
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    List<Biler> bilers = new ArrayList<Biler>();

    try {
        connection = database.getConnection();
        statement = connection.prepareStatement("SELECT id, name, value FROM Biler");
        resultSet = statement.executeQuery();

        while (resultSet.next()) {
            Biler biler = new Biler();
            biler.setId(resultSet.getLong("id"));
            biler.setName(resultSet.getString("name"));
            biler.setValue(resultSet.getInt("value"));
            bilers.add(biler);
        }
    } finally {
        if (resultSet != null) try { resultSet.close(); } catch (SQLException ignore) {}
        if (statement != null) try { statement.close(); } catch (SQLException ignore) {}
        if (connection != null) try { connection.close(); } catch (SQLException ignore) {}
    }

    return bilers;
}
로그인 후 복사

여기서 예를 들어 list() 메서드는 데이터베이스를 쿼리하고 결과를 Biler 객체 목록에 매핑한 다음 목록을 반환합니다. 이렇게 하면 ResultSet이 제대로 닫히고 리소스 누출이 방지됩니다.

또 다른 접근 방식은 코드 블록이 완료되면 자동으로 리소스를 닫는 try-with-resources 문을 사용하는 것입니다.

public List<Biler> list() throws SQLException {
    List<Biler> bilers = new ArrayList<Biler>();

    try (
        Connection connection = database.getConnection();
        PreparedStatement statement = connection.prepareStatement("SELECT id, name, value FROM Biler");
        ResultSet resultSet = statement.executeQuery();
    ) {
        while (resultSet.next()) {
            Biler biler = new Biler();
            biler.setId(resultSet.getLong("id"));
            biler.setName(resultSet.getString("name"));
            biler.setValue(resultSet.getInt("value"));
            bilers.add(biler);
        }
    }

    return bilers;
}
로그인 후 복사

이러한 권장 사항을 따르면 개발자는 ResultSet가 올바르게 처리되어 리소스 누출을 방지하고 Java 애플리케이션에서 효율적인 데이터베이스 액세스를 보장할 수 있습니다.

위 내용은 Java에서 `java.sql.SQLException: ResultSet이 닫힌 후 작업이 허용되지 않음`을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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