Blob Clob字段映射

  许多时候我们需要在数据库中保存大类型的字符串或二进制数据,如图片,下面我们就在user中添加两个大型字段,image--保存用户的照片(blob),resume--保存用户的简历(clob),注意:下面的例子是在mysql下做的,并不是所有的数据库都怎么做,像oracle就比较复杂。

blob 和 clob的区别在于,blob字段采用单字节存储,适合保存二进制数据,如图片。
clob采用多字节存储,适合保存大型文本数据。

新添字段的映射文件如下:
<property
 name="Image"
 column="image"
 type="java.sql.Blob"
 not-null="false"
/>
<property
 name="Resume"
 column="resume"
 type="java.sql.Clob"
 not-null="false"
/>

User.java如下:
public class User implements Serializable{
 private int id;
 private String name;
 private int age;
 private Blob image;
 private Clob resume;
 ...getter/setter
}

测试新建用户:
User user = new User();
user.setId(1001);
user.setName("orm");
user.setAge(22);

FileInputStream fis = new FileInputStream("d:\\showimage.jpg");
Blob img = Hibernate.createBlob(fis);
user.setImage(img);

Clob resume = Hibernate.createClob("I'm orm");
user.setResume(resume);

session.save(user);

我们通过Hibernate.createBlob 和 Hibernate.createClob 创建了对应的Blob Clob对象,其中Blob对象基于一个FileInputStream构建,而Clob对象基于一个字符串创建。

完成了写入操作,对应的读取操作代码如下:
User user = (User)session.load(User.class, new Integer(1001));
Clob resume = user.getResume();
System.out.println(resume.getSubString(1, (int)resume.length()));

Blob img = user.getImage();
InputStream is = img.getBinaryStream();
FileOutputStream fos = new FileOutputStream("D:\\showimage2.jpg");

byte[] buf = new byte[102400];
int len;
while((len = is.read(buf))!=-1){
fos.write(buf,0,len);
}

fos.close();
is.close();

我们完成了针对mysql的blob/clob字段操作,看起来非常简单。

irini   2006-12-03 10:29:54 评论:0   阅读:386   引用:0

发表评论>>

署名发表(评论可管理,不必输入下面的姓名)

姓名:

主题:

内容: 最少15个,最长1000个字符

验证码: (如不清楚,请刷新)

Copyright@2008 powered by YuLog