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

时间:2015-08-14 14:30:23

标签: jasper-reports

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

  1. $ F {DELIVERY_DATE} .dateValue()
  2. $ F {DELIVERY_DATE} .timestampValue()
  3. 但是我得到了相同的运行时错误

    JasperReport错误:

      

    错误填充打印...错误评估表达式:   源文本:$ 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更

    提前致谢

    阿南德

3 个答案:

答案 0 :(得分:1)

试试这个

在iReport中,JasperReport文件的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中修改报表查询时,我可能会直接使用Oracle数据库中的 DataType oracle.sql.TIMESTAMP到JasperReport。

即。尝试将jasperReport文件中的oracle.sql.TIMESTAMP更改为java.util.Date并直接使用Jasper报告中的DELIVERY_DATE Field

注意:
如果在JasperReport的“报告查询”部分修改查询,则可能必须在JasperReport的XML中重复修改DELIVERY_DATE的dataType为java.util.Date

答案 1 :(得分:0)

答案 2 :(得分:0)

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

问题的根源为here