mysql Blob 操作问题,hibernate 读取 Blob
2011-04-13 00:41:22| 分类:
jdbc
| 标签:
|举报
|字号大中小 订阅
最近在修改公司以前系统时,发现系统用到了 blob 类型字段,程序读取时使用:rs.getBinaryStream("CONTENT") 来读取,测试了几次发现有问题,读取出来的内容末尾多了些东西。原因是,在读取blob字段数据时,jdbc返回的其实是一个java.sql.Blob 类型,而我们强制已BinaryStream 方式来读取,于是就出了上面的问题。
正确的方式应该这样:
Blob blob = this.rs.getBlob("CONTENT");
String content = null;
if(blob!=null){
InputStream is = blob.getBinaryStream();
InputStreamReader isr = new InputStreamReader(is);
br = new BufferedReader(isr);
StringBuilder sb = new StringBuilder();
String temp = "";
while ((temp = br.readLine()) != null) {
sb.append(temp);
}
content = sb.toString();
}
另外在hibernate中,如果遇到blob 类型的字段,在modul 中,应该增加另外一个属性来为blob字段对应的属性提供给上层模块程序的操作,上层程序不关心数据是如何保存的,是以varchar 保存还是以blob保存,其只想读取到的是一个String,但hibernate底层查询到的数据返回的是blob类型,那么就需要在modul的属性stter上些手脚如下:
public class Student{
private Blob article;
private String articleString;
public void setArticle(Blob b){
articleString = readBlob2String(b);
}
public void getArticle(){
return Hibernate.createBlob(articleString.getBytes("utf-8"));//注意此方法由hibernate提供。如果使用其他持久框架,应该也有类似方法
}
public void setArticleString(String str){
articleString = s;
}
public String getArticleString(){
return articleString;
}
private String readBlob2String(Blob b){//.........}
}
评论这张
转发至微博
转发至微博
评论