我要将表示为ByteArrayOutputStream的pdf文件保存到表的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
我该如何管理?感谢
答案 0 :(得分:2)
有一个setBlob
需要InputStream
,所以
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
statement.setBlob(2, bais);
答案 1 :(得分:2)
您无法将ByteArrayOutputStream
投射到Blob
。尝试创建Blob
实例,如下所示:
SerialBlob blob = new SerialBlob(baos.toByteArray());
然后
statement.setBlob(2, blob);