JSTL+EL表达式方法获取Oracle的Clob字段内容

我们在页面获得数据的时候一般的类型还是很好获得的,但是一遇到Clob类型就比较麻烦,最常用的方法是用一个流将其读取出来.使用MVC框架的时候这些都是无所谓的事情,因为反正是写在java类中怎么写都行,可是不使用MVC框架,使用jsp页面+JSTLsql标签去读取数据库的数据这种方式就麻烦了,真的很麻烦,你不能在jsp上面嵌java代码吧?要是写java代码 脸上都无光啊 . 呵呵.我们这个新项目就是使用jsp+JSTL标签进行开发.可是有几个表的字段都是Clob类型的(因为要往里面存网页)存的时候使用的控件,可是取出来就取不出来了 结果我写了一个Tag(自定义标签),但是还是挺麻烦的(毕竟自定义标签不是干这个用的,他是干更高级任务的),最终我想到了EL表达式方法在我的一篇Blog中有介绍[ 自定义EL表达式方法 http://tonyaction.blog.51cto.com/227462/42348 ]
代码其实很简单,主要是一种技术的应用.下面是代码:
/**
      *
      * <pre>
      * 创建人 : 王涛
      * 创建于 : 2007 - 8 - 7
      *   :
      *     根据得参数 clob(CLOB 类型 ) 获得其中的内容 , 并以 String 方式返回
      * </pre>
      *
      * @param clob
      * @return
      * @throws Exception
      */
    public static String mClob(Object clob) throws Exception {
       if (clob == null ) {
           return "" ;
       }
       StringBuffer clobString = new StringBuffer();
       if (clob instanceof Clob) {
           int y;
           char ac[] = new char [4096];
           Reader reader = ((Clob) clob).getCharacterStream();
           while ((y = reader.read(ac, 0, 4096)) != -1) {
              clobString.append( new String(ac, 0, y));
           }
       } else {
           clobString.append(clob.toString());
       }
       return clobString.toString();
    }
 
elfunc.tld 配置文件中需要这么写
< function >
       < description > Clob 数据内容函数 </ description >
       < name > mClob </ name >
       < function-class > com.tianjin.canic.tjeg.utils.ELFuncUtil </ function-class >
       < function-signature > java.lang.String mClob(java.lang.Object) </ function-signature >
       < example > ${elf:mClob(clob)} </ example >
    </ function >
 
 
Jsp 页面需要这么写
获得数据库中的结果集
 
< sql:transaction dataSource = "jdbc/tjeg" >
           < sql:query var = "fwsx_info" >
                   SELECT WBJ_ID,BL_URL,FWSX_INFO,FWSX_NAME,FW_FALV,FW_QIXIAN,FW_TIAOJIAN,FW_CAILIAO,FW_SHOUFEI,FW_DOWN FROM TJEG_FWSX WHERE ID = ?
                   < sql:param > ${param.id} </ sql:param >
           </ sql:query >
       </ sql:transaction >
迭代结果集
< c:forEach var = "row" items = "${fwsx_info.rows}">
< c:set value = "${row.FW_FALV}" var="FW_FALV" scope="page"></c:set>
</ c:forEach >
然后页面将其读取出来
< c:out value = "${elf:mClob(FW_FALV)}" escapeXml="false"></c:out>

本文出自 “绝缘材料” 博客,请务必保留此出处http://tonyaction.blog.51cto.com/227462/42455

你可能感兴趣的:(oracle,sql,C++,mvc,jsp)