我在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"
textFieldExpression for class="oracle.sql.CLOB"
任何简单的方法来解决这个问题?
更新:我的问题会像这个家伙,仍然没有解决方案:
http://iswwwup.com/t/1b800f433463/how-jasperreports-display-clob-field-with- html-tags.html
做完了 我发现了一些技巧来解决这个悬而未决的问题。众所周知, 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中,因此它仍然充当String。就我而言,我只使用了6000个字符。 DBMS_LOB.SUBSTR 是用于对数据进行子字符串化的oracle函数。
在我的报告中,我可以像下面这样简单地合并此列:
$F{clob_data_1}+$F{clob_data_2}
我希望有了这个解决方案,它可以为像我这样的有类似问题的人提供帮助。