2011-01-08 67 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