>데이터 베이스 >MySQL 튜토리얼 >데이터베이스 쿼리에서 직접 ResultSet을 반환하는 것이 왜 나쁜 생각입니까?

데이터베이스 쿼리에서 직접 ResultSet을 반환하는 것이 왜 나쁜 생각입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-02 17:59:18435검색

Why is Returning a ResultSet Directly from a Database Query a Bad Idea?

ResultSet 반환

데이터베이스 작업 시 애플리케이션에서 데이터를 검색하고 조작해야 하는 경우가 많습니다. 이를 수행하는 한 가지 방법은 데이터베이스 결과에 대한 액세스를 제공하는 ResultSet을 사용하는 것입니다. 그러나 ResultSet을 직접 반환하는 데는 특정 제한 사항이 있을 수 있습니다.

제한 사항 이해

제공된 코드에서:

public ResultSet select() {
    ...
    return rs;
}

메서드는 ResultSet 참조를 반환하려고 시도합니다. 그러나 이 접근 방식은 문과 연결을 열어두어 조기 릴리스를 방지하므로 리소스 누출 문제가 발생할 수 있습니다.

대체 접근 방식: JavaBeans에 매핑

이러한 제한을 극복하려면 더 나은 접근 방식이 필요합니다. ResultSet을 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;
}

이 수정된 메소드는 Biler 개체 목록을 반환합니다. 그런 다음 ResultSet를 직접 반환하는 것과 관련된 리소스 누출 문제 없이 애플리케이션에서 조작할 수 있습니다.

주목할 만함 개선 사항

위에 설명된 접근 방식 외에도 수정된 코드에는 몇 가지 개선 사항이 포함되어 있습니다.

  • Connection, State 및 ResultSet이 인스턴스 변수로 선언되지 않아 잠재적인 스레드 안전성이 제거됩니다.
  • SQLException은 삼키지 않고 발생하므로 호출자가 필요에 따라 처리할 수 있습니다.
  • 예외가 발생한 경우에도 적절한 리소스 관리를 보장하기 위해 리소스는 finally 블록에서 닫힙니다.

이러한 방식을 채택하면 데이터베이스 상호 작용이 더욱 강력하고 유지 관리가 용이하며 성능이 향상됩니다.

위 내용은 데이터베이스 쿼리에서 직접 ResultSet을 반환하는 것이 왜 나쁜 생각입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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