2014-02-05 2 views
1

내가 자바 프로그램가 발생 자바

 FileInputStream in = new FileInputStream(file); 
     InputStreamReader reader = new InputStreamReader(in); 
     int fileLength = (int)file.length(); 

     pstmt1.setCharacterStream(6, reader, fileLength); 

에 코드 줄을 실행하고 있습니다하지만 일부 파일 (들)에 다음과 같은 예외를 가지고이 아니라 모든 파일 (들)에서의 InputStream에서 읽기는 IOException

예외 : InputStream, 매개 변수 # 6을 (를) 읽는 IOException이 발생했습니다. 남은 데이터가 0x0으로 패딩되었습니다. 자세한 것은 첨부 Throwable를 참조 해주세요. ERRORCODE = -4225, SQLSTATE = 널 (null)이 예외를 복구하는 데 도와주세요 내가 DB2 데이터베이스 및

CREATE TABLE SOURCE (
       LIB VARCHAR(10) NOT NULL, 
       FILE VARCHAR(10) NOT NULL, 
       MBR VARCHAR(10) NOT NULL, 
       ATTR VARCHAR(10) NOT NULL, 
       SEQ DOUBLE NOT NULL, 
       DTA CLOB(5M), 
       DAT INTEGER, 
       RECN INTEGER, 
       UNIQUE (LIB, FILE, MBR, ATTR, SEQ) 
      ); 

은 - 내 테이블의 구조를 사용하고 같은

.

미리 감사드립니다. 나는이 문제를 의심

+0

pstmt1이란 무엇입니까? –

+0

@AnkurShanbhag ['PreparedStatement'] (http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html). – Maroun

+0

예 해당 PreparedStatement – Siddharth

답변

6

setCharacterStream에 매개 변수가 문자의 길이 될 운명 반면 당신이 바이트에있는 파일의 길이에 따라 길이를 설정하는 것입니다.

플랫폼 기본 인코딩을 사용하는 경우는 거의 없으므로별로 좋지 않습니다.

데이터의 인코딩이 무엇인지 알고 계십니까? 고정 너비 인코딩 인 경우 바이트 수에서 문자 수를 계산할 수 있습니다. 그렇지 않으면, 당신은 길이를 지정하지 않는 과부하 호출 더 나을 것 : (.하지만 당신이 InputStreamReader를 만들 때 인코딩을 지정하는 코드를 변경합니까)

pstmt1.setCharacterStream(6, reader); 

을 존의에 추가

+0

Java 5에서 제안한 방법을 사용할 수 없습니다. JDK 6 이상을 사용하고 계십니까? – Kishore

+1

@Kishore : 예, Java 6에서 도입되었습니다. 아직 Java의 고대 버전을 사용하고 있다면 업그레이드를 시도하십시오 - 그것은 당신의 삶을 다양한 방법으로 더 단순하게 만들 것입니다. –

+0

@ JonSkeet Sir, 위의 문제에 대한 적절한 해결책을 말씀해 주시겠습니까? 실제로 JDK 1.5로 제한됩니다. 그래서 JDK1.5의 솔리드 솔루션이 있습니다. 감사! – Siddharth

3

대답. Reader 객체를 사용해보십시오.

Reader reader = (Reader) new BufferedReader(new FileReader(file)); 
int fileLength = (int)file.length(); 
pstmt1.setCharacterStream(6, reader, fileLength); 
+0

어떻게 도움이 될까요? 'FileInputStream' 주변의'InputStreamReader'보다는'FileReader' 주위에'BufferedReader'를 만들고 있습니다. 즉, OP *는 문자 인코딩이 아닌 바이트로 길이를 지정하는 문제를 해결하지 못하는 인코딩을 지정할 수도 없습니다. –

+0

@raVan 여러분의 충고를 구현 한 다음 예외가 변경되면 이제 매개 변수 # 6의 InputStream을 읽는 동안 끝 부분에 도달했습니다. 나머지 데이터는 0x0으로 채워져 있습니다. ERRORCODE = -4225, SQLSTATE = null – Siddharth