在 Jasper 中显示 CLOB

Display CLOB in Jasper

我在 Jasper 中的查询得到了 CLOB 数据,但我无法在我的报告中显示它,我什至尝试了一些我在这个论坛中找到的解决方案。

这两个都不起作用:

new BufferedReader(new InputStreamReader($F{clob_data}.getAsciiStream())).readLine()


$F{clob_data}.getSubString( 1l, ( new Long( $F{clob_data}.length() ) ).intValue() )

即使调试没有错误,运行在网络应用程序中,它会显示:

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

尝试通过附加 "" 或调用 String.valueOf()

从 CLOB 生成字符串对象

完成。我找到了一些技巧来解决这个悬而未决的问题。 我们知道 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}

我希望通过这个解决方案,它可以帮助一些像我一样有类似问题的人。