Java 如何使用JDBC将InputStream插入CLOB?

Java 如何使用JDBC将InputStream插入CLOB?,java,sql,jdbc,jetty,Java,Sql,Jdbc,Jetty,我正在编写一个通过web服务接收逗号分隔文本文件作为输入流的方法。我使用以下SQL脚本创建了表: 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。我无法在运行测试的

我正在编写一个通过web服务接收逗号分隔文本文件作为输入流的方法。我使用以下SQL脚本创建了表:

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();
    }
}
当我执行该方法对其进行测试时,我得到一个异常,当调用setAscistream时,该异常读取“消息负载的类型为:jetty.HttpParser”


知道我如何转换流以便将其添加到CLOB的SQL中吗?

你能试试
InputStreamReader
setCharacterStream
PreparedStatement
方法吗?

我从未听说过通过web服务发送InputStreams。为什么不改为发送字节数组呢?我可以,但我不想回溯,因为服务正在工作。Inputstream有数据,因为我在调试它时可以看到它。问题是将数据从InputStream获取到PreparedStatement。我通过将InputStream转换为字符串,然后执行“preparedStmt.setString(1,theString);”而不是“SetAsCistream”,成功地将其“工作”。我仍然不确定这种技术是否是实现目标的“最佳/标准”方法。这个例外似乎来自您的JDBC驱动程序。您正在使用哪个驱动程序(/连接池)?