gpt4 book ai didi

java - jasperReport 文件出错

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:37:08 25 4
gpt4 key购买 nike

首先我在iReport 5.1.0中制作了一个R_D1.jrxml文件。

我执行报告的 Java 代码如下所示:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;

public class DbReportFill{

Connection con;
public void generateReport() {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sentiment","root", "abcd");
System.out.println("Filling report...");
JasperFillManager.fillReportToFile("/home/abcd/report/R_D1.jrxml",new HashMap<String, Object> (), con);
System.out.println("Done!");
con.close();
} catch (JRException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
new DbReportFill().generateReport();
}

}

当我执行该类时,出现以下异常:

Filling report...
net.sf.jasperreports.engine.JRException: Error loading object from file : /home/abcd/report/R_D1.jrxml
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:127)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:99)
at net.sf.jasperreports.engine.JasperFillManager.fillToFile(JasperFillManager.java:117)
at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:666)
at DbReportFill.generateReport(DbReportFill.java:24)
at DbReportFill.main(DbReportFill.java:56)
Caused by: java.io.StreamCorruptedException: invalid stream header: 3C3F786D
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:802)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
at net.sf.jasperreports.engine.util.ContextClassLoaderObjectInputStream.<init>(ContextClassLoaderObjectInputStream.java:58)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:122)
... 5 more

我不确定我做错了什么,或者这个异常意味着什么。

最佳答案

这里你的主要问题是你没有编译文件。将 JRXML 文件视为 Java 源文件。要运行您的 java 文件,您必须先编译它,然后才能运行。 jrxml 文件只是描述您想要发生的事情的人类可读 XML 文件。

要编译你做的文件:

JasperCompileManager.compileReport("/home/abcd/report/R_D1.jrxml");

这将返回您和一个 JasperReport 的实例,这是编译后的文件。 (这通常写到一个 .jasper 文件中,因此您不必在每次运行时编译报告,但这超出了这个问题的范围)。一旦你有了这个,你就可以填写报告。

此外,不相关但值得一提的是,您应该在 finally block 中关闭数据库连接。与您当前的示例一样,它永远不会关闭,因为会引发异常。 finally block 将确保即使在发生异常时它也会被关闭。

您的示例方法应该如下所示:

public void generateReport() {
Connection con
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sentiment","root", "abcd");
System.out.println("Compiling report...");
JasperReport jasperReport = JasperCompileManager.compileReport("/home/abcd/report/R_D1.jrxml");
System.out.println("Filling report...");
JasperFillManager.fillReportToFile(jasperReport,new HashMap<String, Object> (), con);
System.out.println("Done!");
} catch (JRException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (con != null){
con.close();
}
}
}

希望对您有所帮助。祝你好运。

关于java - jasperReport 文件出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19975718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com