BLOB-объект вставки Java как ByteArrayOutputStream получить ClassCastException
Я должен сохранить PDF-файл, представленный как ByteArrayOutputStream в поле Blob SQL таблицы, вот мой код:
public boolean savePDF(int version, ByteArrayOutputStream baos) throws Exception{
boolean completed = false;
ConnectionManager conn = new ConnectionManager();
try {
PreparedStatement statement = conn.getConnection().prepareStatement(INSERT_PDF);
statement.setLong(1, version);
statement.setBlob(2, (Blob)baos);
statement.execute();
conn.commit();
completed = true;
} catch (SQLException e) {
conn.rollbackQuietly();
e.printStackTrace();
throw e;
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally{
conn.close();
}
return completed;
}
Но я получаю исключение java.lang.ClassCastException:
java.io.ByteArrayOutputStream cannot be cast to java.sql.Blob
Как я могу справиться с этим? Спасибо
2 ответа
Решение
E сть setBlob
это занимает InputStream
, так
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
statement.setBlob(2, bais);
Вы не можете разыграть ByteArrayOutputStream
в Blob
, Попробуйте создать Blob
пример, как показано ниже:
SerialBlob blob = new SerialBlob(baos.toByteArray());
а потом
statement.setBlob(2, blob);