DynamicReports不生成带有where子句的报告

时间:2016-12-20 15:08:00

标签: java mysql jasper-reports dynamic-reports

我面临一个非常奇怪的问题。我试图在DynamicReports API中生成报告。报告是在没有 WHERE 子句的情况下生成的,但不是使用 WHERE 子句生成的。数据库是MySQL。任何帮助深表感谢。这是代码:

服务类:

public class ReportSevice {
    public void createReport (String reportDate) {
        System.out.println(reportDate); 
        String sql_statement = null;
        Connection connection = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/world","root", "password");
            sql_statement = "SELECT id, fName, lName, pickUpDate FROM reservations_db WHERE pickUpDate = " + reportDate;
        } catch (SQLException e) {
            e.printStackTrace();
            return;
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            return;
        } catch (Exception e) {
            e.printStackTrace();
        }

        JasperReportBuilder report = DynamicReports.report();
        report
        .columns(
                Columns.column("Customer Id", "id", DataTypes.integerType()),
                Columns.column("First Name", "fName", DataTypes.stringType()),
                Columns.column("Last Name", "lName", DataTypes.stringType()),
                Columns.column("Date", "pickUpDate", DataTypes.stringType()))
        .title(Components.text("********Report By Date********")
                .setHorizontalTextAlignment(HorizontalTextAlignment.CENTER))
        .pageFooter(Components.pageXofY())
        .setDataSource(sql_statement, connection);

        try {
            report.show();
        } catch (DRException e) {
            e.printStackTrace();
        }
    }
}

2 个答案:

答案 0 :(得分:0)

最后我开始工作了。解决方案非常简单。我在这里为未来的用户分享代码。而不是

sql_statement = "SELECT id, fName, lName, pickUpDate FROM reservations_db WHERE pickUpDate = " + reportDate;

写下这个:

sql_statement = "SELECT id, fName, lName, pickUpDate FROM reservations_db WHERE pickUpDate=$P{reportDate}"

答案 1 :(得分:-2)

我无法保证这会解决您的特定问题,但它却无法解决问题: 而不是在源代码中编写整个查询,而不是"其中"子句和什么不是,在SQL中创建一个函数,它将pickUpDate作为参数,运行查询并返回表。调用它看起来像这样: sql_statement =" select * from function_name(" + reportDate +")"

我希望这有帮助,我使用jasperReports,因为我添加了这种方法,我的生活变得更加容易。欢呼声。