簡體   English   中英

JDBCTemplate / NamedParameterJdbcTemplate無法插入FileItem / Blob

[英]JDBCTemplate/NamedParameterJdbcTemplate failed to insert FileItem/Blob

我有一個普通的PreparedStatementFileItem 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)

與參數BLOB file jdbcTemplate相同的錯誤:

jdbcTemplate.update(INSERT_FILE, file);

FileInputStream參數類似的失敗

我正在嘗試保存(二進制)圖像文件

僅當我將參數類型更改為byte[]時才有效:

 byte[] blob

並在插入中使用它:

jdbcTemplate.update(INSERT_FILE, blob);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM