2011-01-08 36 views
3

我正在編寫一個方法,通過Web服務接收逗號分隔的文本文件作爲InputStream。我使用以下SQL腳本創建了我的表格:如何使用JDBC將InputStream插入到CLOB中?

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。 B/C的機器管理員權限的測試可以在運行,我不能創建一個文件:

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

我的方法目前看起來是這樣的:

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(); 
    } 
} 

當我執行的方法來測試它當setAsciiStream被調用時,我得到一個讀取「消息有效負載的類型爲:jetty.HttpParser」的異常。

任何想法如何轉換流,以便它可以添加到CLOB的SQL?

+0

我從來沒有聽說過通過Web服務發送InputStreams。你爲什麼不發送字節數組呢? – Lukasz 2011-01-08 23:29:21

回答

1

你可以試試InputStreamReadersetCharacterStream方法PreparedStatement