Search code examples
javajasper-reports

How to add 1 day to the given parameter date? Got `java.util.Date cannot be cast to java.sql.Date` error


I am trying to add 1 day to a given parameter date.

In Jaspersoft Studio I have the following parameter

$P{datestart}
Class: java.sql.Date
Default value expression: new Date()

$V{datev}
Class: java.sql.Date
Expression: new java.sql.Date($P{datestart}.getTime() + 24*60*60*1000)

Then I use $V{datev} in the report.

Output error:

Error evaluating expression for source text: 
new java.sql.Date($P{datestart}.getTime() + 24*60*60*1000)  
java.util.Date cannot be cast to java.sql.Date

I tried different expressions but with no luck

Change $v{datev} to new java.util.Date($P{datestart}.getTime() + 24*60*60*1000).
Change $P{datestart} to: new SimpleDateFormat("dd-MM-yyyy").format(new Date())

Does anybody see what I am doing wrong?


Solution

  • Looks like the definition of $P{datestart} parameter is wrong.

    The expression new java.sql.Date($P{datestart}.getTime() + 24*60*60*1000) is valid if the datestart parameter has java.util.Date or java.sql.Date type. As you probably know, the java.sql.Date class is a subclass of java.util.Date

    This Java code is working well:

    java.util.Date date = new java.util.Date();
    new java.sql.Date(date.getTime() + 24*60*60*1000);
    
    java.sql.Date sqlDate = new java.sql.Date(date.getTime());
    new java.sql.Date(sqlDate.getTime() + 24*60*60*1000);
    

    Try to change the type of datestart or even of both (parameter and variable).

    At least you need to fix initialization of datestart parameter.

    There is no java.sql.Date() (without parameters) constructor. Looks like you are using expression which has analogue of Java code like this:

    java.sql.Date sqlDate = new java.util.Date(); // not even compile. Got incompatible types: java.util.Date cannot be converted to java.sql.Date
    

    This declaration will be valid for $P{datestart} of java.sql.Date:

    <parameter name="datestart" class="java.sql.Date">
        <defaultValueExpression><![CDATA[new java.sql.Date(new java.util.Date().getTime())]]></defaultValueExpression>
    </parameter>