java - 如何使用 JDBC 将 InputStream 插入到 CLOB 中?

标签 java sql jdbc jetty

我正在编写一种方法,通过 Web 服务接收逗号分隔的文本文件作为 InputStream。我使用以下 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();
    }
}

当我执行测试它的方法时,调用 setAsciiStream 时出现异常,显示“消息有效负载的类型:jetty.HttpParser”。

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

最佳答案

你能试试 PreparedStatementInputStreamReadersetCharacterStream 方法吗?

关于java - 如何使用 JDBC 将 InputStream 插入到 CLOB 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4635926/

相关文章:

SQL : join 3 tables and show all data from the 2 tables in sub query

用于选择唯一值组合的 SQL 查询,忽略两列顺序

java - java中的preparedStatement SQL错误

java - 为什么不能共享 BoxLayout 而 FlowLayout 可以?

java - 合并步骤后的一些更大的元素不在枢轴的右侧

java - 更好的替代方法是使用 Void 作为可选参数

sql - 在不必要时防止 Django 模型调用中的慢速 INNER JOIN

java - 在 Java 程序中使用 JDBC 执行多个 sql SELECT 查询

java - JSP 的 <% %> 与 <? ?> 对于 PHP?

java - 使用 Hashmap 调试 foreach 时出错