I am trying to pass start & end date as parameter to jasper report but it is not working properly. I am getting a blank PDF. When I hardcode start & end date in the SQL query itself, I am getting right output in PDF.
Using Mysql, eclipse luna, jre1.7, jaspersoft plugin & all required jars are in Lib folder.
My Servlet code -
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection ("jdbc:mysql://localhost:3306/db", "root", "password");
ServletOutputStream servletOutputStream =response.getOutputStream();
InputStream reportStream =getServletConfig().getServletContext().getResourceAsStream("Blank_A4_Table_Based.jasper");
SimpleDateFormat eformat = new SimpleDateFormat("yyyy-MM-dd");
Date sDate = eformat.parse("2015-08-25");
String sdate=eformat.format(sDate );
System.out.println(sdate);
Date eDate = eformat.parse("2015-08-26");
String edate=eformat.format(eDate );
System.out.println(edate);
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("sdate",sDate);
parameters.put("edate",eDate);
JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, parameters, connection);
connection.close();
response.setContentType("application/pdf");
servletOutputStream.flush();
servletOutputStream.close();
} catch (Exception e) {
// display stack trace in the browser
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
e.printStackTrace(printWriter);
response.setContentType("text/plain");
response.getOutputStream().print(stringWriter.toString());
}
Jasper report JRXML -
<parameter name="sdate" class="java.util.Date">
<defaultValueExpression><![CDATA[]]></defaultValueExpression>
</parameter>
<parameter name="edate" class="java.util.Date">
<defaultValueExpression><![CDATA[]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[SELECT id, session_reason FROM session_details WHERE created BETWEEN $P{sdate} AND $P{edate})]]>
</queryString>
I will say make that report in iReport & check whether the issue still persists.
EDIT - Things to remember
public Timestamp(int year, int month, int date, int hour, int minute, int second, int nano)
Deprecated. instead use the constructor Timestamp(long millis)