2016-06-22 66 views
0

spring jdbc 3.0を使用してoracle.sql.BLOB列にbyte []を挿入しようとしています。そして、私は次の例外があります:Spring jdbc例外:Bをoracle.sql.BLOBにキャストできません。

 
java.lang.ClassCastException: [B cannot be cast to oracle.sql.BLOB| 
at oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical(OraclePreparedStatement.java:8752)| 
at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:8286)| 
at oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:8868)| 
at oracle.jdbc.driver.OraclePreparedStatementWrapper.setObject(OraclePreparedStatementWrapper.java:240)| 
at org.apache.commons.dbcp.DelegatingPreparedStatement.setObject(DelegatingPreparedStatement.java:166)| 
at org.apache.commons.dbcp.DelegatingPreparedStatement.setObject(DelegatingPreparedStatement.java:166)| 
at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:356)| 
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:216)| 
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:144)| 
at org.springframework.jdbc.core.ArgTypePreparedStatementSetter.doSetValue(ArgTypePreparedStatementSetter.java:97)| 
at org.springframework.jdbc.core.ArgTypePreparedStatementSetter.setValues(ArgTypePreparedStatementSetter.java:79)| 
at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:815)| 
at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:811)| 
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:586)|at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:811)| 
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:867)| 
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:871)| 
at org.springframework.jdbc.core.simple.AbstractJdbcInsert.executeInsertInternal(AbstractJdbcInsert.java:366)| 
at org.springframework.jdbc.core.simple.AbstractJdbcInsert.doExecute(AbstractJdbcInsert.java:356)| 
at org.springframework.jdbc.core.simple.SimpleJdbcInsert.execute(SimpleJdbcInsert.java:118)| 
.... 

バイト[]はByteBufferオブジェクトから構築されています。

byte[] byte_array = byte_buffer.array(); 

私は同様のjava.sql.Blob型を挿入しようとしたが、それは同様の例外を得た:

 
java.lang.ClassCastException: javax.sql.rowset.serial.SerialBlob cannot be cast to oracle.sql.BLOB| 
at oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical(OraclePreparedStatement.java:8752)| 
at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:8286)| 
at oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:8868)| 
at oracle.jdbc.driver.OraclePreparedStatementWrapper.setObject(OraclePreparedStatementWrapper.java:240)| 
at org.apache.commons.dbcp.DelegatingPreparedStatement.setObject(DelegatingPreparedStatement.java:166)| 
at org.apache.commons.dbcp.DelegatingPreparedStatement.setObject(DelegatingPreparedStatement.java:166)| 
at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:356)| 
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:216)| 
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:144) 
.... 

のjava.sql.BlobもByteBufferのオブジェクトから作成されています。

Blob blob = new SerialBlob(byte_buffer.array()); 

StatementCreatorUtilsはそれがCLOBまたはNCLOBを扱うのjava.sql.Blob方法を処理していないように見えます。このための回避策はありますか?または、私は使用する必要があります別のjavaのSQL型ですか?

+0

あなたは 'java.sql.Blob'値を作成しているどのように実行のタイプがBINARY代わりのBLOBTypes.BINARY

ことをしてみましょうか?質問を編集して、 'java.sql.Blob'値を作成するコードを含めてください。 –

答えて

0

は、私はこの方法を使用し、それが正常に

関連する問題