programing

사용자 지정 유형을 최대 절전 모드로 설정하여 '원인: java.sql'을(를) 방지합니다.SQL 예외:스트림이 이미 닫혔습니다.'

abcjava 2023. 8. 4. 22:34
반응형

사용자 지정 유형을 최대 절전 모드로 설정하여 '원인: java.sql'을(를) 방지합니다.SQL 예외:스트림이 이미 닫혔습니다.'

Oracle에서 긴 값을 처리하는 사용자 지정 긴 클래스를 작성하여 다음 오류를 방지하려면 어떻게 해야 합니까?

원인: java.sql.SQL 예외:스트림이 이미 닫혔습니다.

감사해요.

Oracle은 다음을 사용하지 않는 것이 좋습니다. Long그리고.Long Raw열(Oracle 8i 이후).기존의 이유로만 Oracle에 포함됩니다.이러한 열을 사용해야 하는 경우 의 다른 열을 터치하기 전에 먼저 이 열을 처리해야 합니다.ResultSet:

문서:

쿼리가 하나 이상의 LONG 또는 LONG RAW 열을 선택하면 JDBC 드라이버는 스트리밍 모드에서 이 열을 클라이언트로 전송합니다.실행을 위한 호출 후쿼리 또는 다음, LONG 열의 데이터가 읽기 대기 중입니다.

LONG 열이 있는 테이블을 만들지 마십시오.대신 큰 개체(LOB) 열, CLOB, NCLOB 및 BLOB를 사용합니다.LONG 열은 이전 버전과의 호환성을 위해서만 지원됩니다.기존 LONG 열을 LOB 열로 변환하는 것이 좋습니다.LOB 열은 LONG 열보다 훨씬 적은 제한을 받습니다.

최대 절전 모드에 대해서는 이 질문을 참조하십시오.

다음은 'Oracle에서 긴 값을 처리하는 사용자 지정 Long 클래스를 작성하는 방법'이라는 원래 질문에 대한 답변은 아니지만 Oracle의 긴 원시 열을 쿼리할 때 'Stream has been already closed' 오류를 방지하는 데 도움이 될 수 있습니다.

기존 데이터베이스를 사용하여 열 유형을 변경할 수 없는 경우 이 오류가 발생했습니다.우리는 hibernate3 세션 팩토리와 트랜잭션 매니저와 함께 Spring을 사용합니다.둘 이상의 작업이 동시에 DAO에 액세스할 때 문제가 발생했습니다.우리는 ojdbc14.jar 드라이버를 사용하고 있으며, 새로운 드라이버를 시도했지만 실패했습니다.

OJDBC 드라이버의 연결 속성에서 useFetchSizeWithLongColumn = true를 설정하면 문제가 해결되었습니다.Oracle Driver API 참조

이것은 씬 전용 숙박시설입니다.다른 운전자와 함께 사용해서는 안 됩니다."true"로 설정하면 'SELECT'에서 데이터를 검색할 때 성능은 향상되지만 LONG 열을 처리하는 기본 동작은 여러 행(프리페치 크기)을 가져오도록 변경됩니다.즉, 이 데이터를 읽기에 충분한 메모리가 할당됩니다.따라서 이 속성을 사용하려면 검색 중인 LONG 열이 너무 크지 않은지 확인하십시오. 그렇지 않으면 메모리가 부족할 수 있습니다.이 속성은 java-Doracle.jdbc.useFetchSizeWithLongColumn=true myApplication 속성으로도 설정할 수 있습니다.

결과 집합에서 Oracle LONG 값을 여러 번 가져오려고 하면 이 메시지가 표시되는 것 같습니다.

다음과 같은 코드가 있었습니다.

        rs.getString(i+1) ;
        if (rs.wasNull()) continue ;

        set(queryAttr[i], rs.getString(i+1)) ;

그리고 "Stream has been already closed"라는 오류가 발생하기 시작했습니다.코드를 다음으로 변경했을 때 오류가 발생하지 않았습니다.

        String str = rs.getString(i+1) ;
        if (rs.wasNull()) continue ;

        set(queryAttr[i], str) ;

이는 시스템 테이블 쿼리에서 발생합니다.

SELECT * FROM all_tab_columns
WHERE owner = 'D_OWNER' AND COLUMN_NAME LIKE 'XXX%';

언급URL : https://stackoverflow.com/questions/10174951/hibernate-custom-type-to-avoid-caused-by-java-sql-sqlexception-stream-has-al

반응형