【问题标题】:BIRT report Exception when zero results returned from Data Set queryBIRT 报告数据集查询返回零结果时的异常
【发布时间】:2014-05-06 14:04:38
【问题描述】:

我在 IBM WAS 8.5.5 服务器上运行 BIRT 4.3.2 报告引擎。

当有给定标准的实际结果时,报告可以正常加载。当没有结果时,我收到以下异常:

org.eclipse.birt.data.engine.odaconsumer.ResultSet fetch
SEVERE: Cannot fetch the next data row.
Throwable occurred: org.eclipse.birt.report.data.oda.jdbc.JDBCException: Cannot move down to next row in the result set.
SQL error #1:Invalid operation: result set closed
com.ibm.db2.jcc.c.SqlException: Invalid operation: result set closed
    at org.eclipse.birt.report.data.oda.jdbc.ResultSet.next(ResultSet.java:198)

我知道这个话题:

developer.actuate.com/community/forum/index.php?/topic/25148-exception-is-thrown-when-there-is-no-data-retreived-from-query/

由于我的报表数据源仅定义了 JDBC 类 com.ibm.db2.jcc.DB2DriverJNDI URL,因此它使用 WAS 数据源。我确实尝试将 allowNextOnExhaustedResultSet 自定义属性作为整数值 1 添加到数据源,但这并没有为我解决任何问题。无论如何,这只是一种解决方法。

我在 BIRT 论坛上询问是否会解决此问题,没有回应?正如 IBM 建议的那样 - 修改应用程序代码以避免在没有记录或没有更多记录的情况下调用 ResultSet.next。这是 BIRT 数据引擎代码中的 ResultSet 类。

在此期间还有其他解决方法吗?

可能还值得一提的是,这在 BIRT 4.2.0

上运行没有问题

【问题讨论】:

  • 预览是否失败以及您向用户提供报告?
  • 预览也失败了。您可能会问,因为我包含了我认为可能相关的服务器信息。这可能仍然是因为我用于预览的数据源是基于来自同一服务器运行时的驱动程序。无论如何,我找到了下面描述的解决方法

标签: birt


【解决方案1】:

这里是涉及的代码片段,在org.eclipse.birt.report.data.oda.jdbc.ResultSet.next

    try
    {
        /* redirect the call to JDBC ResultSet.next() */
        if ( currentRow < maxRows && rs.next( ) )
        {
            currentRow++;
            return true;
        }
        return false;
    }
    catch ( SQLException e )
    {
        throw new JDBCException(ResourceConstants.RESULTSET_CURSOR_DOWN_ERROR , e );
    }

根据您提供的链接中的建议,“快速”解决方法是检查此“if”语句中结果集的状态:

if ( currentRow < maxRows && !rs.isClosed() && rs.next( ) )
    {
        currentRow++;
        return true;
    }
return false;

当然需要在Eclipse中下载BIRT的源代码,这有一个自动化的过程。我知道这可能不是您期望的那种解决方案,但它可能是唯一的一种。您不必编译整个 BIRT 项目,只需将该类导出为 .jar 并替换 Eclipse 和 BIRT 运行时环境中的旧类。

将其作为补丁提交到 birt 的 bugzilla 中可能很有价值

【讨论】:

  • 感谢您的建议。我讨厌变通,但我讨厌改变核心 BIRT 相同的大声笑。
【解决方案2】:

答案是,这可能是 BIRT 代码中的一个错误,希望可以通过升级到未来版本来修复。

我建议的解决方法是基于我对异常根本原因的发现。

在 4.2.0 中,我在网格元素中使用了聚合表达式。更新到 4.3.2,这是发生异常的地方且仅当发生异常时。为了解决这个问题,我使用表格元素和相同的聚合表达式创建了相同的布局和生成的报告,并且不再收到没有返回结果的异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多