当我尝试使用(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?
注意:由于要求,我只能从其他部分传递对象。
答案 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();
希望这会对某人有所帮助。