JasperReport:如何从“oracle.sql.TIMESTAMP”字段获取日期?

问题描述 投票:0回答:4

我正在使用 iReport 4.5.1,我需要从 oracle.sql.TIMESTAMP 获取日期。
在我尝试使用这两个表达式的内部:

  1. $F{DELIVERY_DATE}.dateValue()
  2. $F{DELIVERY_DATE}.timestampValue()

但是我遇到了相同的运行时错误

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 更多

提前致谢

阿南德

jasper-reports
4个回答
3
投票

试试这个

在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



0
投票

对于那些进入此页面搜索“oracle.sql.TIMESTAMP 无法转换为 oracle.sql.TIMESTAMP”搜索查询的人 - 除了 Jasper 之外,这可能会发生在其他情况下 - 例如,对我来说,我正在使用我的tomcat 上的项目和 ojdbc6.jar 都加载到我的 web 应用程序和 Tomcat /lib 文件夹中。解决方案是在我的 web 应用程序的 Maven 依赖项中指定具有“提供”范围的 ojdbc6 库。

问题的根源已给出这里


0
投票

对我来说,我将时间戳列转换为字符,然后它解决了问题

 to_char(DELIVERY_DATE, 'DD-MM-YYYY' ) as "DELIVERY DATE"
© www.soinside.com 2019 - 2024. All rights reserved.