IBATIS操作BLOB和CLOB

来源:互联网 发布:eviews面板数据f检验 编辑:程序博客网 时间:2024/05/18 04:00

         数据库中有些字段因为存储的数据量大,而使用特殊格式进行存储,常用的数据类型为BLOB和CLOB格式。
         BLOB(binary large object)和CLOB(Character Large Object)都是数据库中的一种保存文件所使用的类型。都用来存储大对象,BLOB是二进制大对象,是存储二进制文件的容器,典型的BLOB是一张图片或一个声音文件。CLOB使用CHAR来保存数据,常用来保存XML文档。
 blob对应java类型 byte[]  clob对应java类型string

 本次项目中的数据库(Oracle)使用的是BLOB来存储大量文本和数字信息。项目使用Ibatis来实现对BLOB的读取。需求是将BLOB数据读出来显示为字符串.按照一般的读字符串的写法做时会报错,显示为无法转换,那么就需要进行显示的配置转换类型.
        数据库中字段类型为BLOB.
        主要是Ibatis的配置:

       

[html] view plain copy
  1. <!--设置blob字段的返回格式-->  
  2. <resultMap id="tempblob" class="java.util.HashMap">  
  3.       <result property="CONTENT" column="CONTENT" jdbcType="BLOB" javaType = "java.lang.String" />  
  4. </resultMap>  
  5.   
  6. <!--通过cuid查到blog字段的数据,配置上返回格式为tempblob-->  
  7. <select id="queryBlobByCuid" parameterClass="java.lang.String" resultMap="tempblob">  
  8.      SELECT CONTENT FROM TEST WHERE CUID=#CUID#   
  9. </select>  


       

        java代码如下:           

[java] view plain copy
  1.         /** 
  2.      * 通过cuid查询blob 
  3.      * @param cuid 
  4.      * @return blob的String 
  5.      * @throws Exception 
  6.      * @author WHuan 
  7.      */  
  8.       
  9.      public String getBlobByCuid(String serviceCuid) throws Exception {  
  10.          
  11.            Map map = (Map) this.IbatisResDAO.getSqlMapClientTemplate()  
  12.                               .queryForObject(sqlMap+".queryBlobByCuid", serviceCuid);  
  13.                String StrResult="";  
  14.            if(map!= null){  
  15.           byte[] blobBytes = (byte[])map.get("CONTENT");  
  16.           //转为gbk编码              
  17.                   StrResult=new String(blobBytes,"GBK");     
  18.                }   
  19.                return StrResult;  
  20.           }  

        如果没有配置tempblob格式来指定blob数据格式,而直接使用resultMap="java.lang.String",或者使用resultMap="oracle.sql.BLOB",或者使用resultMap="java.sql.Blob"这几种数据格式都是读不出来数据的,经过多次测试,有只用配置jdbcType="BLOB",javaType="java.lang.String",Ibatis才能正确识别,并将Blob数据转换成String进行输出.

        CLOB也是同样情况,对CLOB的处理只需设置jdbcType="CLOB"即可.

      也就是:string  content = (string)map.get("CONTENT"); 

0 0
原创粉丝点击