Java 如何连接Jasperrport以打印netbeans中Postgress db中的某些数据
我正在尝试使用JasperReports生成一些报告 这就是我到目前为止所做的Java 如何连接Jasperrport以打印netbeans中Postgress db中的某些数据,java,postgresql,jasper-reports,Java,Postgresql,Jasper Reports,我正在尝试使用JasperReports生成一些报告 这就是我到目前为止所做的 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { Connection conn = null; try{ Class.forName("org.postgresql.postgresql-42.2.
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Connection conn = null;
try{
Class.forName("org.postgresql.postgresql-42.2.2");
conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/test", "postgres", "testPassword");
String report = "";
JasperReport jasperReport = JasperCompileManager.compileReport(report);
JasperPrint jp = JasperFillManager.fillReport(jasperReport, null, conn);
JasperExportManager.exportReportToPdfStream(jp, response.getOutputStream());
response.getOutputStream().flush();
response.getOutputStream().close();
}catch(Exception ex){
System.out.println(ex);
}
}
这一切都是我在这个人的帮助下完成的
但是“response.getOutputStream()”不起作用。
它找不到响应变量。(本教程是在eclipse中编写的,因此认为这就是原因,否则netbeans将无法找到它。)
解决这个问题的办法是什么?
您还有其他方法吗?用于将PDF保存到文件:
JasperExportManager.exportReportToPdfFile(jp, "path/to/file.pdf");
如果您只想在屏幕上显示它:用于在窗口中显示它
JasperViewer.viewReport(jp, false);
代码有很多问题。让我们一次解决一个问题 加载JDBC驱动程序 以下代码将失败:
Class.forName(“org.postgresql.postgresql-42.2.2”);
这不是一个类,而是对包含驱动程序类的Java存档的引用。提供了以下使用JDBC驱动程序的示例:
String url = "jdbc:postgresql://localhost/test";
Properties props = new Properties();
props.setProperty("user","fred");
props.setProperty("password","secret");
props.setProperty("ssl","true");
Connection conn = DriverManager.getConnection(url, props);
-或-
您必须确保org.postgresql.postgresql-42.2.2.jar位于类路径的某个位置,以便可以找到驱动程序类
没有指定报告文件
以下代码不正确:
String report=”“;
这需要指向要加载JRXML文件的路径。例如:
String report = "reports/Template.jrxml";
AWT和JSF?
下一行表示正在编写桌面应用程序,因为它引用了AWT ActionEvent:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){
但是,报告将导出到响应输出流,这建议写入web浏览器:
JasperExportManager.exportReportToPdfStream(jp,response.getOutputStream());
JasperReports不能很好地处理JSF输出流。相反,您需要将Servlet与JasperReports一起使用,并使用简单的h:commandLink
或h:commandButton
从网页开始生成报告
有关详细信息,请参阅
响应变量
响应变量未在提供的代码段中声明。当使用Servlet时,响应变量由提供:
现在可以使用response
变量,但只能在Servlet上下文中使用
干燥原理
作为次要说明,以下三行违反了:
相反,你可以写:
OutputStream out = response.getOutputStream();
JasperExportManager.exportReportToPdfStream(jp, out);
out.close();
通常不需要调用out.flush()
,因为out.close()
将确保数据被刷新
推荐
在线查看演示如何使用Servlet生成报告的示例
也可以考虑使用一个基本的应用程序来运行报表,然后从命令行中运行,然后尝试与Web应用程序的servlet进行技术上复杂的操作。
您想将PostgreSQL数据库与Jasper report Studio或iReport连接以使用PostgreSQL数据库生成报告,对吗?我设计了一个应用程序,可以生成某些报告,它是用netbeans编写的。我想将PostgreSQL与Jasper Reprot连接您想对生成的报告做什么?您的PDF导出代码似乎来自一个Servlet,其中
response
是保存对浏览器响应的变量……您的方法似乎是一个Swing操作(按下按钮)如果浏览器没有响应。您可能希望将PDF保存到文件中…好的,首先使用此链接下载ireport,然后我将要求您进行数据库连接选择“数据库JDBC连接”-->下一步-->选择PostgreSQL JDBC连接“PostgreSQL(org.PostgreSQL.Driver)”在JDBC url中,传递正确的主机名、数据库名和端口号。。
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,
IOException {
// ... your code here to handle generating report ...
}
JasperExportManager.exportReportToPdfStream(jp, response.getOutputStream());
response.getOutputStream().flush();
response.getOutputStream().close();
OutputStream out = response.getOutputStream();
JasperExportManager.exportReportToPdfStream(jp, out);
out.close();