BIRT 报告设计器空数据集脚本

BIRT Report Designer empty DataSet scripting

我正在使用 BIRT Report Designer 4.4.0,但我一直收到错误消息

org.eclipse.birt.report.engine.api.EngineException: Cannot fetch the next data row. org.eclipse.birt.report.data.oda.jdbc.JDBCException: Cannot move down to next row in the result set. SQL error #1:The result set is closed ; org.firebirdsql.jdbc.FBSQLException: The result set is closed

当 BIRT 试图从我知道是空的数据集中获取一行时。我发现这是 BIRT 的一个常见问题,并试图在数据集上使用 beforeOpen 脚本来防止出现空数据集,我可能在其中做错了,因为它不起作用。 我创建了一个 vars[[=​​38=]] 并想计算 OnFetch 被调用的频率。

打开前:

vars["item"] = 0;

OnFetch:

vars["item"]++;

关闭前:

if (vars["item"] == 0)
{
  row[0] = "0";
}

这不起作用,因为我猜没有行[0]。

当我将数据集的 queryText 编辑为

SELECT "0" from kontrolle

这肯定会产生一个数据集,我仍然遇到相同的 "Cannot fetch the next data row" 错误!

设计大致如下:

<table>
   <table>
      <table> here is the dataset in question
      </table>
   </table>
</table>

第二个 table 仅通过一个参数绑定到第一个 table,但是,第三个 table 有两个参数绑定到第二个。

希望解释得足够好,有人可以提供解决方案。

如前所述,将 defaultResultSetHoldable=true 添加到连接属性(例如在 JDBC url 中)。这指示 Jaybird 默认创建具有可保存结果集的连接(相当于在代码中调用 connection.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT))。

我不太了解 BIRT,所以这只不过是对原因的有根据的猜测:

  1. 它可以在不明确询问或检查结果集的情况下期望可持有的结果集,并在打开结果集后提交(在 Jaybird 中,默认情况下结果集在提交时关闭)
  2. BIRT 可以使用 autoCommit=true(默认值),但不希望在同一连接上执行另一个语句时关闭结果集(这会导致关闭结果集等资源,并且按照 JDBC 标准的规定提交;在某些方面,这是第 1 点的特化)。