注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

kangzye的博客

加Q群25382780切磋java,加19360923群研究JavaScript

 
 
 

日志

 
 

mysql Blob 操作问题,hibernate 读取 Blob  

2011-04-13 00:41:22|  分类: jdbc |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
        最近在修改公司以前系统时,发现系统用到了 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){//.........}
}
  评论这张
 
阅读(2289)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017