将对象转换为blob(java.lang.ClassCastException:[B不能转换为java.sql.Blob)

时间:2013-04-04 03:36:02

标签: java

当我尝试使用(Blob)将Oject转换为blob时,得到java.lang.ClassCastException:[B不能转换为java.sql.Blob错误。

但是当我尝试使用以下代码进行转换并将其写为图像文件时,会损坏图像。

Blob blob = null;

        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutput out = null;
        try {
          out = new ObjectOutputStream(bos);   
          out.writeObject(myObj);

          byte[] yourBytes = bos.toByteArray();

          //blob.setBytes(1, yourBytes );
          blob = new SerialBlob(yourBytes);
        } finally {
          out.close();
          bos.close();
        }

如何安全地将对象(保存为Blob的图像文件)转换为Blob?

注意:由于要求,我只能从其他部分传递对象。

3 个答案:

答案 0 :(得分:1)

您可以使用

如果您正在使用休眠

      Blob blob = Hibernate.createBlob(bytes, session); 

如果您使用的是JDBC

       Blob blob = connection.createBlob();
       blob.setBytes(1, bytes);

答案 1 :(得分:0)

由于你收到的类强制转换异常,我会在这里说出来,并说你实际上并没有从中获得Blob。

进行调试,看看实际发送的是什么类型。

我可能错了,但据我所知,Clobs和Blob不可序列化......所以如果另一方是网络,它将是kaboom ......

答案 2 :(得分:0)

不确定我的答案有多相关,但已使用上述答案作为提示来达到此目的。

使用 - 以下依赖

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.1.0.Final</version>
</dependency>

模型类中的属性定义为 -

java.sql.Blob message;

在有效模型映射中的mymodel.hbm.xml文件中

<class name="packagepath.Pojo" table="pojotableindb">
<meta attribute="class-description">
     Pojo class is mapped to pojotableindb table
  </meta>
    <id name="id" column="ID" type="long">
    <!-- for auto increment -->
        <generator class="identity" />
    </id>
    <property name="message" column="MESSAGE" type="blob" />
</class>

现在,在我的一个DAO方法中,我做了如下操作,在MESSAGE列中插入一个值 -

Pojo pojo = new Pojo();
pojo.setMessageId(uuid);
//message is the string argument this DAO method receives         
activityTrack.setMessage(Hibernate.getLobCreator(session).createBlob(message.getBytes())); 

tx = session.beginTransaction();
session.save(pojo);
tx.commit(); 

希望这会对某人有所帮助。