Ich versuche, ein Byte [] in eine Oracle.sql.BLOB-Spalte mit Spring JDBC 3.0 einfügen. Und ich habe die folgende Ausnahme:Spring jdbc Ausnahme: B kann nicht in oracle.sql.BLOB umgewandelt werden
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)| ....
Das Byte [] wird aus einem ByteBuffer-Objekt erstellt.
byte[] byte_array = byte_buffer.array();
ich versuchte auch einen Typ java.sql.Blob Einsetzen, aber das hat eine ähnliche Ausnahme:
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) ....
Die java.sql.Blob auch aus einem ByteBuffer Objekt erstellt wird.
Blob blob = new SerialBlob(byte_buffer.array());
Es sieht aus wie StatementCreatorUtils behandelt nicht java.sql.Blob wie es CLOB oder NCLOB behandelt. Gibt es dafür einen Workaround? Oder gibt es einen anderen Java-SQL-Typ, den ich verwenden sollte?
Wie ausgeführt ist die 'java.sql.Blob' Wert? Bearbeiten Sie Ihre Frage so, dass sie den Code enthält, mit dem der Wert "java.sql.Blob" erstellt wird. –