Как вставить InputStream в CLOB, используя JDBC? - PullRequest
3 голосов
/ 08 января 2011

Я пишу метод, который получает разделенный запятыми текстовый файл в виде 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();
    }
}

Когда я выполняю метод, чтобы проверить его, я получаю исключение, которое гласит «Полезная нагрузка сообщения имеет тип: jetty.HttpParser», когда вызывается setAsciiStream.

Есть идеи, как преобразовать поток, чтобы он мог быть добавлен в SQL для CLOB?

1 Ответ

1 голос
/ 13 января 2011

Вы можете попробовать InputStreamReader и setCharacterStream метод PreparedStatement?

...