Hibernate 读写Blob和Clob的问题!

radium0028 2008-01-02 11:52:44
今天练习了一下读写Blob和Clob发现点问题~不知道如何解决了.
如果在Test中只调用reader() 那么一切正常,
但是如果现调用insert() 那在reader()读取到最后一条记录的时候就会出现异常
Exception in thread "main" java.lang.UnsupportedOperationException: Blob may not be manipulated from creating session
at org.hibernate.lob.ClobImpl.excep(ClobImpl.java:128)
at org.hibernate.lob.ClobImpl.getSubString(ClobImpl.java:94)
at org.hibernate.lob.SerializableClob.getSubString(SerializableClob.java:37)
at com.xl.test.Text.reader(Text.java:77)
at com.xl.test.Text.main(Text.java:34)
Text.java:77指向的却有是一条Clob语句!!苦闷啊~~下边是关键代码.


package com.xl.vo;

import java.sql.Blob;
import java.sql.Clob;


/**
* Userinfo entity.
*
* @author MyEclipse Persistence Tools
*/

public class Userinfo implements java.io.Serializable {

// Fields

private Integer id;
private Blob faceimag;
private Clob remark;

// Constructors

/** default constructor */
public Userinfo() {
}


// Property accessors

public Integer getId() {
return this.id;
}

public void setId(Integer id) {
this.id = id;
}

public Blob getFaceimag() {
return this.faceimag;
}

public void setFaceimag(Blob faceimag) {
this.faceimag = faceimag;
}

public Clob getRemark() {
return this.remark;
}

public void setRemark(Clob remark) {
this.remark = remark;
}

}



package com.xl.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;

import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.xl.se.HibernateSessionFactory;
import com.xl.vo.Userinfo;

public class Text {

/**
* @param args
*/
private static Session session = HibernateSessionFactory.getSession();
public static void main(String[] args) {
//如果不执行insert()那么就将一切正常~~~
String filePath = new File("bin").getAbsolutePath()+"\\image\\1.jpg";
insert(filePath);
System.out.print("插入成功!");

reader();
}

private static void insert(String filePath){
try {

FileInputStream file = new FileInputStream(filePath);
Blob blob = Hibernate.createBlob(file);
Userinfo user = new Userinfo();
user.setFaceimag(blob);


Clob clob = Hibernate.createClob("This is Clob DataType");
user.setRemark(clob);

Transaction tra = session.beginTransaction();
session.save(user);
tra.commit();

file.close();

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

private static void reader(){
try {
InputStream is = null;
FileOutputStream file = null;
List list = session.createQuery("from Userinfo").list();
Iterator it = list.iterator();
int count = 0;
while(it.hasNext()){
count++;
System.out.println(count);
Userinfo user = (Userinfo)it.next();
int id = user.getId();
Clob clob = user.getRemark();
String remark = clob.getSubString(1, (int)clob.length());//这句话报异常
System.out.println(remark);

Blob blob = user.getFaceimag();
is = blob.getBinaryStream();
file = new FileOutputStream("d://"+count+".jpg");

byte [] bytes = new byte[1024];
int len;
while((len = is.read(bytes)) != -1){
file.write(bytes);
}
}
is.close();
file.flush();
file.close();

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

...全文
1586 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
marlonjlz 2011-08-03
  • 打赏
  • 举报
回复
一个Session中只能存在 一个Hibernate.createClob(),你的某些转化工作与其冲突了
响耳 2008-05-21
  • 打赏
  • 举报
回复
关注中。我所遇到的现象是,单独调用Hibernate.createClob("test");方法,就有可能出现异常。而且异常信息较怪:Caused by: java.lang.UnsupportedOperationException: Blob may not be manipulated from creating session,希望能得到解决办法。
umbrella_yxs 2008-01-04
  • 打赏
  • 举报
回复
你数据库用的是什么啊?
nyxuekui 2008-01-04
  • 打赏
  • 举报
回复
如果数据库用的是Oracle的话,你可以看一下夏昕翻译的Hibernate深入浅出。
由于Oracle处理Clob以及Blob的处理方式与SQL server不同.
liuzi123 2008-01-03
  • 打赏
  • 举报
回复
关注
sh_royan 2008-01-03
  • 打赏
  • 举报
回复
mask
aChinese 2008-01-03
  • 打赏
  • 举报
回复
分两个session来搞好了。
老紫竹 2008-01-03
  • 打赏
  • 举报
回复
坏了,被你误导了
应该是
Blob blob = user.getFaceimag();
is = blob.getBinaryStream();

FaceImag 才对,这个没有初始化。
老紫竹 2008-01-03
  • 打赏
  • 举报
回复
你的那个
user.getRemark();
对应的remark 没有初始话啊! 应该在insert的时候用empty_clob 初始化才行

也就是你的insert 里面
老紫竹 2008-01-03
  • 打赏
  • 举报
回复
UnsupportedOperationException
不支持的操作

你怎么对 blob 调用 getSubString() 呢!
这个是对 clob使用的才对!

OVER
radium0028 2008-01-03
  • 打赏
  • 举报
回复
为什么要分两个呢?
二楼的朋友说mask~~~~什么意思?有什么东西被屏蔽了?
本课程详细讲解了以下内容:    1.jsp环境搭建及入门、虚拟路径和虚拟主机、JSP执行流程    2.使用Eclipse快速开发JSP、编码问题、JSP页面元素以及request对象、使用request对象实现注册示例    3.请求方式的编码问题、response、请求转发和重定向、cookie、session执行机制、session共享问题     4.session与cookie问题及application、cookie补充说明及四种范围对象作用域     5.JDBC原理及使用Statement访问数据库、使用JDBC切换数据库以及PreparedStatement的使用、Statement与PreparedStatement的区别     6.JDBC调用存储过程和存储函数、JDBC处理大文本CLOB及二进制BLOB类型数据     7.JSP访问数据库、JavaBean(封装数据和封装业务逻辑)     8.MVC模式与Servlet执行流程、Servlet25与Servlet30的使用、ServletAPI详解与源码分析     9.MVC案例、三层架构详解、乱码问题以及三层代码流程解析、完善Service和Dao、完善View、优化用户体验、优化三层(加入接口和DBUtil)    1 0.Web调试及bug修复、分页SQL(Oracle、MySQL、SQLSERVER)     11.分页业务逻辑层和数据访问层Service、Dao、分页表示层Jsp、Servlet     12.文件上传及注意问题、控制文件上传类型和大小、下载、各浏览器下载乱码问题     13.EL表达式语法、点操作符和中括号操作符、EL运算、隐式对象、JSTL基础及set、out、remove     14.过滤器、过滤器通配符、过滤器链、监听器     15.session绑定解绑、钝化活化     16.以及Ajax的各种应用     17. Idea环境下的Java Web开发

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧