JDBCTemplate / NamedParameterJdbcTemplate не удалось вставить FileItem / Blob - PullRequest
0 голосов
/ 24 марта 2019

У меня есть обычный PreparedStatement, который вставляет столбец FileItem fileItem в BLOB:

ps.setBinaryStream(1, fileItem.getInputStream(), (int) fileItem.getSize());

Проблема, которую я могу ввести от FileItem до NamedParameterJdbcTemplate:

Я пытался сTypes.BLOB:

MapSqlParameterSource paramSource = new MapSqlParameterSource();
paramSource.addValue("blob",  fileItem.getInputStream(), Types.BLOB);
jdbcTemplate.update(INSERT_FILE, paramSource);

Но получено исключение

SQL state [99999]; error code [17004]; Invalid column type; nested exception is java.sql.SQLException: Invalid column type

Caused by: java.sql.SQLException: Invalid column type
    at oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical(OraclePreparedStatement.java:10503)
    at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:9974)
    at oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:10581)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.setObject(OraclePreparedStatementWrapper.java:249)
    at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.setObject(HikariProxyPreparedStatement.java)
    at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:469)
    at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:241)
    at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:156)
    at org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.setValues(PreparedStatementCreatorFactory.java:292)
    at org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.createPreparedStatement(PreparedStatementCreatorFactory.java:244)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:633)

Та же ошибка с jdbcTemplate с параметром BLOB file:

jdbcTemplate.update(INSERT_FILE, file);

Сбой аналогично с другимипараметры как File и InputStream

Я пытаюсь сохранить (двоичный) файл изображения

1 Ответ

0 голосов
/ 24 марта 2019

Работает только при изменении типа параметра на byte[]:

 byte[] blob

И использовать его во вставке:

jdbcTemplate.update(INSERT_FILE, blob);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...