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에 추가 할 수 있도록 어떻게 변환 할 수 있습니까?
웹 서비스를 통해 InputStream을 보내는 것에 대해 들어 본 적이 없습니다. 바이트 배열을 보내지 않는 이유는 무엇입니까? – Lukasz
나는 할 수 있었다. 그러나 나는 서비스가 작동하고 있기 때문에 추적하고 싶지 않다. Inputstream에는 데이터를 디버깅 할 때 볼 수 있기 때문에 데이터가 있습니다. 문제는 InputStream에서 PreparedStatement로 데이터를 가져 오는 것입니다. – TERACytE
InputStream을 String으로 변환 한 다음 "preparedStmt.setString (1, theString);"을 실행하여 '작업'으로 가져올 수있었습니다. "setAsciiStream"대신에. 이 기술이 목표를 달성하기위한 '최고/표준'방법인지 아직 확실하지 않습니다. – TERACytE