2011-01-08 8 views
3

웹 서비스를 통해 쉼표로 구분 된 텍스트 파일을 InputStream으로받는 메소드를 작성하고 있습니다. 다음 SQL 스크립트를 사용하여 테이블을 만들었습니다.JDBC를 사용하여 CLOB에 InputStream을 삽입하는 방법은 무엇입니까?

CREATE SEQUENCE FILE_NUMBER_SEQ 
INCREMENT BY 1 
START WITH 1 
MINVALUE 1 
NOMAXVALUE; 

CREATE TABLE FILES 
(
    ID  NUMBER NOT NULL , 
    FILE  CLOB NOT NULL 
); 

내 단위 테스트에서 다음 코드를 사용하여 CSV를 생성하고 있습니다. 테스트가 실행 중일 수 있습니다/시스템에 관리자 권한의 C b를 나는 파일을 만들 수 없습니다 : 나는이 방법을 실행하면

public void uploadCSVFile(InputStream stream) { 
    try { 

     Connection conn = null; 
     PreparedStatement preparedStmt = null; 

     conn = db.getDataSource().getConnection(); 
     conn.setAutoCommit(false); 

     String sql = "INSERT INTO FILES(ID,FILE) VALUES(FILE_NUMBER_SEQ.NEXTVAL,?)"; 
     preparedStmt = conn.prepareStatement(sql); 
     preparedStmt.setAsciiStream(1, stream); 
     int count = preparedStmt.executeUpdate(); 
    } 
} 

를 테스트하려면 :

String simulatedCSVFile = new String("col1,col2\\ndata1,data2"); 
    InputStream stream = new ByteArrayInputStream(
           simulatedCSVFile.getBytes("UTF-8")); 

내 방법은 다음과 같습니다 setAsciiStream이 호출 될 때 "message payload is type : jetty.HttpParser"라는 예외가 발생합니다.

스트림을 CLOB 용 SQL에 추가 할 수 있도록 어떻게 변환 할 수 있습니까?

+0

웹 서비스를 통해 InputStream을 보내는 것에 대해 들어 본 적이 없습니다. 바이트 배열을 보내지 않는 이유는 무엇입니까? – Lukasz

+0

나는 할 수 있었다. 그러나 나는 서비스가 작동하고 있기 때문에 추적하고 싶지 않다. Inputstream에는 데이터를 디버깅 할 때 볼 수 있기 때문에 데이터가 있습니다. 문제는 InputStream에서 PreparedStatement로 데이터를 가져 오는 것입니다. – TERACytE

+0

InputStream을 String으로 변환 한 다음 "preparedStmt.setString (1, theString);"을 실행하여 '작업'으로 가져올 수있었습니다. "setAsciiStream"대신에. 이 기술이 목표를 달성하기위한 '최고/표준'방법인지 아직 확실하지 않습니다. – TERACytE

답변

1

InputStreamReadersetCharacterStream 방법을 PreparedStatement 시도해 볼 수 있습니까?

관련 문제