2011-12-22 2 views
2

우리는 저장소 정보를 포함하는 결과 집합을 반복하는 Java 클래스를 가지고 있으며 각 저장소에 대한 ascii 파일 처리를 시작합니다. 처리 할 각 상점에 대해 ascii 파일은 약 5 분이 소요됩니다. 우리가 마주 친 문제는 첫 번째 저장소의 ascii 파일을 처리 한 후 다음 결과 세트를 가져온 후에 "DSRA9110E : ResultSet is closed"라는 SQLException이 발생합니다.DSRA9110E : ResultSet이 닫힙니다.

코드는 기본적으로 다음과 같습니다.

private void startProcess() throws Exception { 
    PreparedStatement pstmt = null; 
    ResultSet rs = null; 

    try { 
     pstmt = conn.prepareStatement("SELECT STORE_CODE FROM STORE"); 
     rs = pstmt.executeQuery(); 

     while (rs != null && rs.next()) { 
      System.out.println("Processing store " + rs.getString("STORE_CODE")); 

      try { 
       processStoreSalesFile(); 
      } catch (Exception e) { 
       conn.rollBack(); 
       e.printStackTrace(); 
      } 

      if (rs != null) { 
       System.out.println("ResultSet is not null"); 
      } 
     } 
    } finally { 
     if (rs != null) { 
      rs.close(); 
      rs = null; 
     } 

     if (pstmt != null) { 
      pstmt.close(); 
      pstmt = null; 
     } 
    } 
} 

오류가 발생하면 시스템 인쇄 라인 "ResultSet is not null"이 표시됩니다. 그러나 다음 ResultSet을 가져 오면 ResultSet이 닫혔다 고합니다.

processStoreSalesFile()을 호출하는 코드를 주석 처리하려고 시도했지만이 오류가 발생하지 않았으며 예외를 throw하지 않고 다음 ResultSet을 반입 할 수 있습니다.

내가 시도한 다음 시도는 processStoreSalesFile() 메서드에 대한 호출의 주석 처리를 제거한 다음 프로그램에서 아무 것도 처리하지 않도록 파일 시스템에서 모든 ascii 파일을 제거하는 것입니다. 예외도 없습니다.

설정은 WebSphere-Informix입니다. 우리는 다른 설정 WebSphere-Oracle을 가지고 있으며 아무런 문제가 없었습니다.

내가 예상 한 것은 ResultSet이 시간 초과되었거나 프로세스가 완료되고 자체적으로 종료되기를 기다리지 않으려는 것입니다.

업데이트 1 : processStoreSalesFile() 메서드 내에는 레코드를 커밋하기위한 conn.commit() 호출이 있습니다. 커밋이 호출되면 ResultSet이 닫힙니 까? WAS 관리 콘솔에서 이미 데이터 소스 속성 resultSetHoldability에 '1'값을 추가했습니다. 그러나 여전히 ResultSet은 닫혀 있습니다.

나는 누군가가 나를 여기에 도움이 될 수 있습니다 :(희망

감사합니다.

답변

2

을 위해 반드시 오라클 드라이버 지원이. 확인 처음에는 Websphere가 Informix 데이터베이스에 연결했기 때문에 Informix JDBC 드라이버를 데이터 소스로 사용하도록 구성되었습니다 .IBM Informix 기술 지원에서 제안한대로 DB2 JCC 드라이버를 사용하도록 변경했습니다) 그리고 나서 데이터 소스 커스텀 프로퍼티에서 'res ultHoldability '값을'1 '로 설정합니다 (HOLD_CURSORS_OVER_COMMIT). 프로그램을 다시 실행하면 결과 세트의 모든 결과를 반복 할 수 있습니다.

1

당신은 pstmt.setQueryTimeout (초)을 사용할 수 있습니다. 자세한 내용 여기 here

+0

방금 ​​시도했습니다. 나는 pstmt.setQueryTimeout (0)과 pstmt.setQueryTimeout (1000)을했다. 여전히 오류가 발생합니다. "[12/23/11 4 : 04 : 16 : 915 MYT] 00000017 SystemOut O com.ibm.websphere.ce.cm.ObjectClosedException : DSRA9110E : ResultSet이 닫혔습니다." –

+0

연결이 끊어 질 수 있습니다. 연결 개체를 지역화하고 다시 시도 할 수 있습니까? – nayakam