注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 我很郁闷,19岁的工程师找..
 帮助

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


2007-09-14 10:54:59
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://tonyaction.blog.51cto.com/227462/42455
我们在页面获得数据的时候一般的类型还是很好获得的,但是一遇到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





    文章评论
 
2007-09-14 17:12:15
很感谢51CTO的管理员,在我刚刚发表了这篇Blog就给我推荐了...我会继续努力~..写出更好的文章

2007-09-14 17:45:46
顶。。。

2007-09-15 22:37:17
学习
好文章

2007-11-20 16:20:28
Important:

The <sql:transaction> tag is important as it keeps the connection open for clob content retrieval.

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: