我正在使用 iReport 4.5.1,我需要从 oracle.sql.TIMESTAMP 获取日期。
在我尝试使用这两个表达式的内部:
但是我遇到了相同的运行时错误
Jasper报告错误:
填写打印时出错...评估表达式时出错: 源文本:$F{DELIVERY_DATE}.dateValue() net.sf.jasperreports.engine.fill.JRExpressionEvalException:计算表达式时出错: 源文本:$F{DELIVERY_DATE}.dateValue() at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:203) 在 net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:591) 在 net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:559) 在 net.sf.jasperreports.engine.fill.JRFillElement.evaluateExpression(JRFillElement.java:876) 在 net.sf.jasperreports.engine.fill.JRFillTextField.evaluateText(JRFillTextField.java:421) 在 net.sf.jasperreports.engine.fill.JRFillTextField.evaluate(JRFillTextField.java:406) 在 net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:257) 在 net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:473) 在 net.sf.jasperreports.engine.fill.JRVerticalFiller.fillBandNoOverflow(JRVerticalFiller.java:434) 在 net.sf.jasperreports.engine.fill.JRVerticalFiller.fillPageHeader(JRVerticalFiller.java:398) 在 net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:259) 在 net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:128) 在 net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:836) 在 net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:746) 在 net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:58) 在 net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417) 在 net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:247) 在 com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:879) 在 org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572) 在 org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997) 导致:java.lang.ClassCastException:oracle.sql.TIMESTAMP 无法转换为 oracle.sql.TIMESTAMP 在Liste_colisage_par_rack_1439547941026_908820.evaluate(Liste_colisage_par_rack_1439547941026_908820:438) 在 net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:190) ... 19 更多
提前致谢
阿南德
试试这个
在iReport中,JasperReport File的XML文件:
<queryString>
<![CDATA[*your query*]]>
</queryString>
<field name="DELIVERY_DATE" class="oracle.sql.TIMESTAMP"/>
<field name="NAME" class="java.lang.String"/>
也尝试改变一下
<queryString>
<![CDATA[*your query*]]>
</queryString>
<field name="DELIVERY_DATE" class="java.util.Date"/>
<field name="NAME" class="java.lang.String"/>
当您在 JasperReport 中修改 Report Query 时,您可能会直接使用从 Oracle 数据库到 JasperReport 的
DataType
oracle.sql.TIMESTAMP
。
即尝试在 jasperReport 文件中将
oracle.sql.TIMESTAMP
更改为 java.util.Date
并直接在 Jasper Report 中使用 DELIVERY_DATE Field
注意:
如果修改 JasperReport 的报表查询部分的查询,可能需要在 JasperReport 的 XML 中重复修改 DELIVERY_DATE 的 dataType 为
java.util.Date
对于那些进入此页面搜索“oracle.sql.TIMESTAMP 无法转换为 oracle.sql.TIMESTAMP”搜索查询的人 - 除了 Jasper 之外,这可能会发生在其他情况下 - 例如,对我来说,我正在使用我的tomcat 上的项目和 ojdbc6.jar 都加载到我的 web 应用程序和 Tomcat /lib 文件夹中。解决方案是在我的 web 应用程序的 Maven 依赖项中指定具有“提供”范围的 ojdbc6 库。
问题的根源已给出这里
对我来说,我将时间戳列转换为字符,然后它解决了问题
to_char(DELIVERY_DATE, 'DD-MM-YYYY' ) as "DELIVERY DATE"