사용자 지정 유형을 최대 절전 모드로 설정하여 '원인: 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
'programing' 카테고리의 다른 글
ECMA스크립트 6에는 추상 클래스에 대한 규약이 있습니까? (0) | 2023.08.04 |
---|---|
mysqdump: 쓰기에서 오류 32를 받았습니다. (0) | 2023.08.04 |
Oracle에서 기본 키를 재사용할 수 있도록 이름을 변경하는 방법 (0) | 2023.08.04 |
오류: 'uint16_t'이(가) 선언되지 않았습니까? (0) | 2023.08.04 |
완료 버튼으로 UI Picker View를 만드는 방법은 무엇입니까? (0) | 2023.08.04 |