>  기사  >  데이터 베이스  >  Java에서 MySQL 연결을 닫을 때 \"java.sql.SQLException: ResultSet이 닫힌 후 작업이 허용되지 않음\"이 발생하는 이유는 무엇입니까?

Java에서 MySQL 연결을 닫을 때 \"java.sql.SQLException: ResultSet이 닫힌 후 작업이 허용되지 않음\"이 발생하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-31 11:03:29744검색

Why am I getting

Java에서 MySQL 연결 닫기 문제

문제:

예외, "java.sql.SQLException: 작업 ResultSet이 닫힌 후에는 허용되지 않습니다."라는 메시지가 MySQL 데이터베이스에 대한 연결을 닫을 때 발생하며, 이는 연결 종료 후 ResultSet 처리에 문제가 있음을 나타냅니다.

코드 발췌:

<code class="java">public static ResultSet sqlquery(String query) {
    ResultSet rs = null;
    Connection connection = null;
    Statement st = null;
    try {
        // Establish connection and execute query
    } finally {
        // Attempt to close connection and ResultSet objects
    }
    return rs;
}</code>

설명:

JDBC는 모든 쿼리 결과를 ResultSet에 즉시 검색하지 않습니다. 대신 결과 검색을 용이하게 하는 개체를 제공합니다. 그러나 이 개체는 연결이 닫히면 유효하지 않게 됩니다.

해결 방법:

이 문제를 방지하려면 코드에서 연결을 닫기 전에 쿼리 결과를 저장할 개체를 생성해야 합니다. . 여기에는 RowMapper를 사용하여 ResultSet 행을 객체에 매핑하고 메서드의 결과로 반환되는 컬렉션을 채우는 작업이 포함됩니다.

해결된 코드:

<code class="java">public static <T> List<T> sqlquery(String query, RowMapper<T> rowMapper) {
    Connection connection = null;
    Statement st = null;
    ResultSet rs = null;
    try {
        // Establish connection and execute query
    } finally {
        // Handle possible exceptions gracefully
    }
    while (rs.next()) {
        list.add(rowMapper.mapRow(rs));
    }
    return list;
}</code>

추가 참고 사항:

  • RowMapper를 사용하면 다양한 데이터 유형을 처리하기 위한 코드의 재사용성과 다양성이 향상됩니다.
  • SQL 삽입 공격을 방지하려면 쿼리 매개변수화를 고려하세요.
  • Spring-jdbc는 JDBC 작업을 손쉽게 처리할 수 있는 강력한 솔루션을 제공합니다.

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

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