2013-09-06 3 views
0

하나의 열이 BLOB 인 테이블에 두 개의 삽입이 있습니다. 처음에는 blob 저장소를 올바르게 삽입합니다. 두 번째 삽입에서는 null을 저장하고 디버깅하는 동안 blobnullbinder는 이전 필드가 동일한 필드에 대해 blobbinder를 표시하는 위치를 보여줍니다. 이 삽입은 for 루프에서 두 번 발생하지만 테이블의 다른 필드는 다르지만 BLOB는 동일합니다. CallableStatement &으로 설정하기 전에 디버깅하여 값을 두 번 인쇄하지만 두 번째 시간은 null로 설정합니다. 왜 이런 행동을 하죠.BLOB 필드는 문에있는 데이터를 통해 자동으로 null로 설정됩니다.

if (paramValue instanceof InputStream) 
    ((CallableStatement) stmt).setBlob(i + 1, (InputStream) paramValue); 
+0

그것을 바이트 []에 paramValue 변환 및 설정? – aksappy

답변

1

paramValueInputStream 두 통화에 걸쳐 같은 객체인가?

이 경우 우리는 두 번째 반복이 시작되면 스트림이 이미 소비되고 따라서 null 값이라고 가정 할 수 있습니다.

InputStream은 두 번 이상 사용할 수 없기 때문에 내용을 캐시해야합니다. 나는 byte []로 모든 스트림의 내용을 읽어 제안, 당신의 방법에 전달하고 다음과 같이 코드를 수정 :

if (paramValue instanceof byte[]) 
    ((CallableStatement) stmt).setBlob(i + 1, new ByteArrayInputStream((byte[]) paramValue)); 
+0

예 ... 두 번째 반복에서 동일한 값입니다. 언급했듯이 이미 소비 될 것이므로 명확하게 설명하고 문제를 해결할 수 있습니까? – Anil

+0

코드 샘플을 사용하여 답변을 편집했습니다. 나는 그것이 도움이되기를 바랍니다 .. –

관련 문제