在oracle 中 ,有时varchar2 类型不能满足对字段的存储,这就需要 用 大类型数据存储
如: blob
hibernate 对blob 字段操作步骤如下:
1、在java Bean 中 定义一字段
public class NewsEntry {
private Blob contents2 ;
private String content;
... get ,set 方法 (省略不写)
}
2、写映射文件
<property
name="contents2"
update="true"
insert="true"
access="property"
type="java.sql.Blob" // 类型必须是这样的
column="CONTENT"
/>
3、把字符串写入blob 并同步到数据库
public void save() throws Exception {
OutputStream out;
try {
NewsEntry entry = new NewsEntry ();
entry.setContents2(Hibernate.createBlob(new byte[1]));
entry.setContent("你好");
session.save(entry);
session.flush();// 强制执行insert
// 通过refresh方法,强制Hibernate执行select for update
session.refresh(entry, LockMode.UPGRADE);
// 向Blog写入实际内容
BLOB blob = (BLOB) entry.getContents2();
out = blob.getBinaryOutputStream();
byte [] buf = new byte[1];
if (entry != null) {
buf = entry.getContent()== null ? null:entry.getContent().getBytes("gbk");
}
out.write(buf);
out.close();
} catch (RuntimeException e) {
throw new Exception(e);
}
}
通过这几步就可以把字符串写入到blob 字段中并 同步到数据库
4 、读出Blob 字段的数据
public NewsEntry loadNews(long id) throws Exception {
NewsEntry entry = this.getNewsFromDB(id);
StringBuffer sb = new StringBuffer();
// 这个是blob类型的代码
byte[] content = new byte[1];
if (entry != null) {
Blob contents2 = entry.getContents2();
if (contents2 != null) {
int len = (int) contents2.length();
content = new byte[len];
InputStream input = contents2.getBinaryStream();
input.read(content,0,len);
}
}
return entry;
}