【发布时间】:2016-04-09 00:15:19
【问题描述】:
是否可以在报告生成期间在 IReports/jasper 报告中执行“插入查询”?
【问题讨论】:
-
你想达到什么结果?您可以尝试在调用应用程序的预构建报告事件中创建触发器。
是否可以在报告生成期间在 IReports/jasper 报告中执行“插入查询”?
【问题讨论】:
是的,您需要的想法是使用以下语法的参数:$P!{PARAM_NAME}。
因此,您的整个 SQL 查询(或其他类型的查询)可能只是 $P!{SQL}。然后你传入你需要的动态 SQL。
更新: 看完Sharad的评论后,我意识到我上面的答案并不好。我写的是真的……但它没有解决核心问题。
不,您的报表无法真正执行插入语句。严格来说,我敢肯定这不是不可能的。您可以在 .jar 文件中添加一个 scriptlet 或自定义函数来建立连接并执行插入操作。但实际上……一份报告将执行一个或多个查询。 JR 框架不打算执行插入或更新。
【讨论】:
是的,你可以。您可以在要显示报表时执行查询。这是一个适合我的示例。
try {
Map parameters = new HashMap();
connectionString ="jdbc:mysql://localhost/myDb", "myUsername", "myPassword"
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(connectionString);
PreparedStatement stmt = conn.prepareStatement(query);
ResultSet rs = stmt.executeQuery();
JRResultSetDataSource rsdt = new JRResultSetDataSource(rs);
JasperPrint jp;
jp = JasperFillManager.fillReport("sourceFileName.jasper", parameters, rsdt);
JasperViewer jv = new JasperViewer(jp, false);
jv.setVisible(true);
} catch (ClassNotFoundException | SQLException | JRException ex) {
ex.printStackTrace();
}
【讨论】: