【问题标题】:Why is my Jasper Report displaying several null values?为什么我的 Jasper 报告显示多个空值?
【发布时间】:2014-11-10 03:43:06
【问题描述】:

我知道我的 Jasper 报告正在正确地从我的数据库中读取数据,因为它的行数与我的数据库相同。但是,它正在用“null”填充所有参数。为什么要这样做?

我的代码:

Connection connection;
    Statement stmt;
    ResultSet rs;

    try {

        String query = "SELECT CertificateCode, FirstName, LastName, IssueDate, ExpirationDate, Used FROM giftcertificates";
        //System.out.println("Query created. Connecting to driver...");
        Class.forName("org.h2.Driver");
        //System.out.println("Connected to driver. Establishing connection to database...");
        connection = DriverManager.getConnection("jdbc:h2:./GiftCertificateManagerDatabase;AUTO_SERVER=TRUE");
        //System.out.println("Database connection established. Creating statement...");
        stmt = connection.createStatement();
        //System.out.println("Statement created. Executing query...");
        rs = stmt.executeQuery(query);
        //System.out.println("Query executed. Creating data source with result set...");
        JRResultSetDataSource rsdt = new JRResultSetDataSource(rs);
        //System.out.println("Jasper Report data source created.");
        //System.out.println("Creating JasperReport and JasperPrint...");
        JasperReport jasperReport;
        JasperPrint jasperPrint;
        //System.out.println("JasperReport and JasperPrint created. Compiling report...");

        jasperReport = JasperCompileManager.compileReport("Reports/GiftCertificateReport.jrxml");
        //System.out.println("Report compiled. Filling report with appropriate information...");
        jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap(), rsdt);
        //System.out.println("Report filled. Creating viewer...");
        JasperViewer view = new JasperViewer(jasperPrint);
        //System.out.println("Viewer created. Preparing to display...");
        view.setVisible(true);
        //System.out.println("Viewer displayed. Preparing to close connection...");
        System.out.println(rs);
        connection.close();
        //System.out.println("Connection closed.");
    } catch (ClassNotFoundException | SQLException | JRException ex) {
        ex.printStackTrace();
    }    

【问题讨论】:

  • 我猜您使用的是不同的(新的、空的)数据库。你完全明白jdbc:h2:./GiftCertificateManagerDatabase 是什么意思吗?这意味着相对于当前工作目录。我建议尝试使用绝对路径,例如jdbc:h2:/data/GiftCertificateManagerDatabase
  • 不,我完全知道那句话是什么意思。那是我用来创建和存储数据库的目录,所以我应该能够从同一个目录中读取它。
  • 除此之外,我知道它正在从数据库中正确读取,因为它正在拉入与数据库包含的相同数量的空行。
  • 当您使用@ThomasMueller 所描述的空数据库时,它获取的空行数无关紧要。它只是为您替换要表示的值,没有获取实际发生

标签: java database jasper-reports h2


【解决方案1】:

我认为 Jasper 正在用 null 填充所有参数,因为您将空映射传递给 fill 方法:

jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap(), rsdt);

你必须用你想要的参数填充那个 HashMap。

JasperFillManager.fillReport apidoc

【讨论】:

  • 感谢您的回答。所以,HashMaps 是我一无所知的东西。如何用我的数据库中的信息填充 HashMap?感谢您的帮助。
  • 看看docs.oracle.com/javase/tutorial/collections 你得用你从数据库中恢复的参数名和参数值调用put方法。
  • 我试图这样做。当我这样做时,它只允许我插入一条记录。然后,我的报告显示了数据库中的一条记录,但它只显示了一条记录。在这里查看我的新问题:[stackoverflow.com/questions/26835610/…
  • 您的回答有点帮助,所以我将其标记为已接受。如果您不介意提及我的另一个问题,那就太棒了。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多