0

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

我该如何管理?谢谢

4

2 回答 2

2

你不能投射ByteArrayOutputStreamBlob. 尝试Blob如下创建实例:

  SerialBlob blob = new SerialBlob(baos.toByteArray());

接着

  statement.setBlob(2, blob);    
于 2012-11-08T17:02:40.510 回答
2

有一个setBlob需要一个InputStream,所以

ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
statement.setBlob(2, bais);
于 2012-11-08T17:01:55.360 回答