小编典典

在Jasper中显示CLOB

java

我在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


阅读 361

收藏
2020-11-30

共1个答案

小编典典

做完了 我发现了一些技巧来解决这个悬而未决的问题。众所周知, 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}

我希望有了这个解决方案,它可以为像我这样的有类似问题的人提供帮助。

2020-11-30