>

이 코드를 시도하고 실행할 때마다 "java.sql.SQLException : ResultSet 종료 후 작업이 허용되지 않습니다"라는 메시지가 나타납니다. 연결을 닫지 않고 작동하지만이 오류가 발생하는 이유와 연결을 닫는 올바른 방법은 무엇인지 궁금합니다. 코드는 다음과 같습니다.

   public ResultSet UpdateTable(){
            Connection con = connect();
            ResultSet resultset;
            Statement s = null;
            resultset = null;
        try{
            s = con.createStatement();
            resultset =  s.executeQuery("select * from customera");
            return resultset;
            }
        catch(SQLException e){
            System.out.println(e.getMessage());
            //con.close();
        }
        finally{
            try{
                s.close();
                resultset.close();
                con.close();
            }
            catch(SQLException e){
                System.out.println(e.getMessage());
            }
        }
        return null;
    }
}


  • 답변 # 1

    참조가 있는지 확인한 다음 닫으십시오.

    finally {
            if (resultset != null) {
                resultset.close();
            }
            if (s != null) {
                s.close();
            }
            if (con != null) {
                con.close();
            }
        }
    
    

    의심하다, 문제

    return resultset;
    
    

    당신은 Connection 를 닫고 있습니다  그리고 Statement   ResultSet 를 반환하기 전에 그래서 ResultSet  사용하지 못할 수 있습니다. 당신은 finally 를 알고 있어야합니다  값을 반환하기 전에 블록이 실행됩니다. 그래서 당신이 Connection 를 떠날 때 코드가 작동하는 이유입니다  열다.

    대신 결과를 일부 데이터 구조에 저장하고 반환해야합니다.

  • 답변 # 2

    표시된 코드에서 오류가 발생하지 않았을 가능성이 있습니다. 대신 ResultSet 를 닫은 결과 다른 코드에서 생성되고 있습니다.  그리고 Statement  다른 코드에서 사용하기 전에. ( Statement 닫기  또한 ResultSet 를 닫습니다 설명서에 따라).

    ResultSet 를 사용하여 완료하는 데 필요한 코드를 호출 할 수 있습니다  이 방법으로, 또는 당신은 단지 ResultSet 를 반환 할 수 있습니다  닫는 것은 호출 코드의 책임입니다. 당신이 결정하는 것은 다른 코드에 따라 다를 수 있지만, 코드를 호출 코드의 책임으로 만드는 것을 선호합니다 (특히 ResultSet 를 받기 때문에)  이 방법을 사용하면 닫아야합니다.)

    부수적으로, 예외 메시지를 더 잘 구분해야 어디에서 왔는지 알 수 있습니다.

  • 이전 javascript - 선택한 요소의 마지막 자식 대신 스타일 집합 중 마지막 자식에 스타일이 추가됨
  • 다음 c# - 웹 API에서 GET 요청에 쿼리 매개 변수를 추가하는 방법