在 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}
我希望通过这个解决方案,它可以帮助一些像我一样有类似问题的人。
我在 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}
我希望通过这个解决方案,它可以帮助一些像我一样有类似问题的人。