【问题标题】:Insert query in jasper reports在 jasper 报告中插入查询
【发布时间】:2016-04-09 00:15:19
【问题描述】:

是否可以在报告生成期间在 IReports/jasper 报告中执行“插入查询”?

【问题讨论】:

  • 你想达到什么结果?您可以尝试在调用应用程序的预构建报告事件中创建触发器。

标签: jasper-reports ireport


【解决方案1】:

是的,您需要的想法是使用以下语法的参数:$P!{PARAM_NAME}

因此,您的整个 SQL 查询(或其他类型的查询)可能只是 $P!{SQL}。然后你传入你需要的动态 SQL。

更新: 看完Sharad的评论后,我意识到我上面的答案并不好。我写的是真的……但它没有解决核心问题。

不,您的报表无法真正执行插入语句。严格来说,我敢肯定这不是不可能的。您可以在 .jar 文件中添加一个 scriptlet 或自定义函数来建立连接并执行插入操作。但实际上……一份报告将执行一个或多个查询。 JR 框架不打算执行插入或更新。

【讨论】:

  • 在我们的实验中,我们发现如果我们使用插入或更新,IReport 会给出错误...请给我们一些见解...
  • @mdahlman:我做了什么,创建了一个输入控件“$P!{p_insert_sql}”并设置默认值“”INSERT INTO t_error_log (LogID) VALUES(2)”,但它显示错误:可以不使用 executeQuery() 发出数据操作语句
  • 你不觉得如果我们有这个工具通过 JasperReport Server 插入或更新到数据库,我们可以在任何级别上做更好的报告,那么我们可以使用 JasperReport Server 作为入口点也喜欢excel,只需在数据库中创建一次表,然后通过 Jasper 插入记录并查看报告,我们不必一次又一次地实际使用数据库来插入或更新记录。
【解决方案2】:

是的,你可以。您可以在要显示报表时执行查询。这是一个适合我的示例。

    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();
    }

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多