我在Jasper中的查询得到了CLOB数据,但是我无法在我的报告中显示它,我甚至尝试了我在这个论坛中找到的一些解决方案。
这两种方法都不起作用:
new BufferedReader(new InputStreamReader($F{clob_data}.getAsciiStream())).readLine()
$F{clob_data}.getSubString( 1l, ( new Long( $F{clob_data}.length() ) ).intValue() )即使在没有错误的情况下调试,在web应用程序中运行它之后,它也会显示:
error=net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression :
Source text : ...
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to oracle.sql.CLOB我的报告中的CLOB字段:
<field name="clob_data" class="oracle.sql.CLOB"/>这就是我如何显示我的CLOB字段:
<textFieldExpression class="java.lang.String"><![CDATA[$F{clob_data}.getSubString( 1l, ( new Long( $F{clob_data}.length() ) ).intValue() )]]></textFieldExpression>
<textFieldExpression class="java.lang.String"><![CDATA[new BufferedReader(new InputStreamReader($F{clob_data}.getAsciiStream())).readLine()]]></textFieldExpression>没有textFieldExpression for class="oracle.sql.CLOB"
有什么简单的方法吗?
更新:我的问题就像这家伙一样,仍然没有解决办法:
http://iswwwup.com/t/1b800f433463/how-jasperreports-display-clob-field-with-html-tags.html
发布于 2015-09-01 09:39:20
好了。我找到了一些技巧来解决这个没有答案的问题。众所周知,Varchar2只支持4000个字符。因此,我想出了一个技巧,在查询中用CLOB数据的一部分剪切,如下所示:
select DBMS_LOB.SUBSTR(clob_field, 4000, 1) as clob_data_1
select DBMS_LOB.SUBSTR(clob_field, 2000, 4001) as clob_data_2
from table如您所见,我分别将CLOB数据放在clob_data_1和clob_data_2中,因此它仍然充当字符串。在我的例子中,我只使用了6000个字符。DBMS_LOB.SUBSTR是一个用于子字符串数据的oracle函数。
在我的报告中,我可以这样简单地组合这个专栏:
$F{clob_data_1}+$F{clob_data_2}我希望这个解决方案能帮助像我这样有类似问题的人。
发布于 2015-08-14 04:01:10
尝试通过添加"“或调用String.valueOf()从CLOB生成一个字符串obiect。
https://stackoverflow.com/questions/32001392
复制相似问题