Я пишу метод, который получает текстовый файл с разделителями-запятыми в качестве InputStream через веб-службу. Я создал таблицу, используя следующий SQL скрипта:Как вставить InputStream в CLOB с помощью JDBC?
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. Я не могу создать файл б/с правами администратора на компьютере тест может быть запущен на:
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?
Я никогда не слышал о передаче InputStreams через веб-службы. Почему бы вам не отправить байтовый массив? – Lukasz
Я мог бы, но я не хочу возвращаться, так как служба работает. Входной поток имеет данные, потому что я могу его увидеть, когда я его отлаживаю. Проблема заключается в получении данных из InputStream в PreparedStatement. – TERACytE
Мне удалось заставить его «работать», преобразовая InputStream in в String и затем выполнив «readyStmt.setString (1, theString)»; вместо «setAsciiStream». Я до сих пор не уверен, что этот метод является «лучшим/стандартным» способом достижения цели. – TERACytE