Mohamed Bawaneen
Mohamed Bawaneen

Reputation: 159

How to solve ClassCastException when passing date parameters to jasper report?

I have a report with between date parameters on derby database and I have got below message when sending dates through two text fields to run i to got below quote error msg.

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Date at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.setDate(JRJdbcQueryExecuter.java:615)

My code to call jasper report is here:

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);
   }    
}

Upvotes: 0

Views: 1631

Answers (1)

Petter Friberg
Petter Friberg

Reputation: 21710

You have a different class between parameter passed and definition in jrxml.

jTfdate.getText() is returning an object of type java.lang.String

in jrxml you have this definition of parameter

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

Solution, pass a java.util.Date object in your parameter map.

Example

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

Where the pattern, "yourPattern" should correspond to the text parsed see SimpleDateFormat pattern's.

How to catch the ParseException and set default value, I leave to you.

Upvotes: 2

Related Questions