java insert Blob as ByteArrayOutputStream获取ClassCastException

时间:2012-11-08 16:55:37

标签: java sql casting blob bytearrayoutputstream

我要将表示为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

我该如何管理?感谢

2 个答案:

答案 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);