> 데이터 베이스 > MySQL 튜토리얼 > Java에서 데이터베이스 결과 세트를 안전하게 반환하고 리소스 누출을 방지하려면 어떻게 해야 합니까?

Java에서 데이터베이스 결과 세트를 안전하게 반환하고 리소스 누출을 방지하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2024-11-29 02:24:09
원래의
442명이 탐색했습니다.

How Can I Safely Return Database Result Sets in Java and Avoid Resource Leaks?

안전하게 결과 세트 반환

데이터베이스 쿼리에서 결과 세트를 반환하는 것은 리소스 누출 위험으로 인해 복잡한 작업이 될 수 있습니다. 여기서는 데이터를 효율적으로 반환하기 위한 대체 접근 방식을 탐색하여 이 문제를 해결합니다.

문제:

결과 집합을 직접 반환하려고 하면 코드에서 오류가 발생합니다. 메소드 실행 후 결과 세트가 닫히기 때문에 java.sql.SQLException이 발생합니다.

해결책: 다음으로 매핑 JavaBeans

결과 세트 자체를 반환하는 대신 데이터를 JavaBeans 컬렉션에 매핑합니다. 이 접근 방식을 사용하면 결과 집합을 반복하는 동안 연결과 문을 열린 상태로 유지할 수 있습니다. 예는 다음과 같습니다.

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

    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;
}
로그인 후 복사

Try-with-Resources 문

Java 7 이상을 사용하는 경우 try-with-resources를 활용할 수 있습니다. 자동 자원 폐쇄 명령문:

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

    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;
}
로그인 후 복사

추가 고려사항

연결, 명령문 및 결과 세트를 인스턴스 변수로 선언하지 않는 것이 중요합니다(스레드 안전성 문제). 또한 SQLException을 적절하게 처리하고 올바른 순서로 리소스를 닫는 것이 중요합니다. 이러한 지침을 따르면 리소스 관리를 유지하면서 효과적으로 결과 세트를 반환할 수 있습니다.

위 내용은 Java에서 데이터베이스 결과 세트를 안전하게 반환하고 리소스 누출을 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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