将日期参数传递给jasper报告时如何解决ClassCastException?

时间:2016-01-29 19:41:42

标签: java date jasper-reports

我在derby数据库上有一个日期参数之间的报告 当我通过两个文本字段发送日期来运行i时,我得到以下消息 得到以下报价错误消息。

  

线程“AWT-EventQueue-0”中的异常java.lang.ClassCastException:   java.lang.String无法强制转换为java.util.Date at   net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.setDate(JRJdbcQueryExecuter.java:615)

调用jasper报告的代码在这里:

public void runREport() {
   try {     
       Connection con1= null;

       String Op=jTsubmain_no.getText();
       int val = Integer.parseInt((String) Op.trim());
       Map param1 = new HashMap();
       param1.put("sub_no",val);
       param1.put("fdate",jTfdate.getText());
       param1.put("ldate",jTldate.getText());

       try {
              con1= DriverManager.getConnection("jdbc:derby://localhost:1527//accountsdb","accounts","accounts");
       } catch (SQLException ex) {
              Logger.getLogger(reports.class.getName()).log(Level.SEVERE, null, ex);
       }

       String jrxmlFileName = "C:/Users/hosam/Documents/NetBeansProjects/Accsys/src/accsys/report2.jrxml";
      JasperDesign jasperDesign = JRXmlLoader.load(jrxmlFileName);
      JasperReport jasperReport =JasperCompileManager.compileReport(jasperDesign);
      JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, param1, con1);
      JasperViewer.viewReport(jasperPrint); 
   } catch (JRException ex) {
           JOptionPane.showMessageDialog( null,  ex);
   }    
}

1 个答案:

答案 0 :(得分:2)

jrxml中传递的参数和定义之间有不同的类

jTfdate.getText()正在返回java.lang.String

类型的对象

在jrxml中你有参数

的定义
<parameter name="fdate" class="java.util.Date">
    <defaultValueExpression><![CDATA[""]]></defaultValueExpression>
</parameter>

解决方案,在参数地图中传递java.util.Date对象。

实施例

param1.put("fdate",new SimpleDateFormat("yourPattern").parse(jTfdate.getText()));

如果模式"yourPattern"应与解析的文字相对应,请参阅SimpleDateFormat pattern's

如何抓住ParseException并设置默认值,我留给您。