2015-08-14 4 views
0

Мой запрос в Jasper получил данные CLOB, но я не могу отобразить его в своем отчете, я даже попробовал некоторое решение, которое я нашел на этом форуме.Показать CLOB в Jasper

Оба они не работали:

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"

Любой простой способ справиться с этим?

Update: Моя проблема не будет, как этот парень, до сих пор нет решения:

http://iswwwup.com/t/1b800f433463/how-jasperreports-display-clob-field-with-html-tags.html

+0

Кажется, что jasperreports имеет проблемы с преобразованием строки _from_ в CLOB, а не наоборот. Возможно, у вас проблемы с запросом или настройкой базы данных? –

+0

Нет. Мой запрос работал нормально. – ggDeGreat

ответ

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 - это функция оракула для данных подстроки.

В моем докладе, я могу просто объединить эту колонку так же, как это:

$F{clob_data_1}+$F{clob_data_2} 

Я надеюсь, что с этим решением, он может помочь некоторым людям, которые имеют аналогичные проблемы, как и я.

0

Попытка сделать Струнный obiect из CLOB либо путем добавления «» или позвонив по телефону String.valueOf()

+0

нет удача. 'java.lang.ClassCastException: java.lang.String не может быть передан в oracle.sql.CLOB' – ggDeGreat

Смежные вопросы