DynamicReports 不生成带有日期 where 子句的报告
DynamicReports not producing report with where clause on date
我遇到了一个非常奇怪的问题。我正在尝试在 DynamicReports API 中生成报告。生成的报告没有 WHERE 子句,但没有使用 WHERE 子句生成。数据库是 MySQL。任何帮助深表感谢。这是代码:
服务class:
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();
}
}
}
我不能保证这会解决您的特定问题,但值得一试:
不要在你的源代码中编写完整的查询,完成 "where" 子句什么的,在 SQL 中创建一个函数,它将 pickUpDate 作为参数,运行查询和 returns table。调用它看起来像这样:
sql_statement = "select * from function_name(" + reportDate + ")"
我希望对您有所帮助,我使用 jasperReports,自从我采用了这种方法后,我的生活变得轻松多了。干杯。
我终于让它工作了。解决方法很简单。我在这里为未来的用户分享代码。而不是
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}"
我遇到了一个非常奇怪的问题。我正在尝试在 DynamicReports API 中生成报告。生成的报告没有 WHERE 子句,但没有使用 WHERE 子句生成。数据库是 MySQL。任何帮助深表感谢。这是代码:
服务class:
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();
}
}
}
我不能保证这会解决您的特定问题,但值得一试: 不要在你的源代码中编写完整的查询,完成 "where" 子句什么的,在 SQL 中创建一个函数,它将 pickUpDate 作为参数,运行查询和 returns table。调用它看起来像这样: sql_statement = "select * from function_name(" + reportDate + ")"
我希望对您有所帮助,我使用 jasperReports,自从我采用了这种方法后,我的生活变得轻松多了。干杯。
我终于让它工作了。解决方法很简单。我在这里为未来的用户分享代码。而不是
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}"