【问题标题】:BIRT Report Designer empty DataSet scriptingBIRT 报表设计器空数据集脚本
【发布时间】:2015-08-25 07:50:35
【问题描述】:

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

org.eclipse.birt.report.engine.api.EngineException:无法获取下一个数据行。 org.eclipse.birt.report.data.oda.jdbc.JDBCException:无法下移到结果集中的下一行。 SQL错误#1:结果集已关闭; org.firebirdsql.jdbc.FBSQLException: 结果集已关闭

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

打开前:

vars["item"] = 0;

OnFetch:

vars["item"]++;

关闭前:

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

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

当我将数据集的 queryText 编辑为只是

SELECT "0" from kontrolle

这肯定会产生一个数据集,但我仍然遇到同样的“无法获取下一个数据行”错误!

设计大致是这样的:

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

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

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

【问题讨论】:

  • 您使用的是哪个 Jaybird 版本?
  • 我使用的是 Jaybird 2.2.7
  • 如果将defaultResultSetHoldable=true 添加到连接属性(例如在JDBC url 中)会发生什么?
  • 我不知道我是应该感到沮丧还是过分高兴,只是添加这个就可以了!非常感谢!不过我删除了脚本。
  • 好吧,我维护 Jaybird,不幸的是,看起来很多应用程序都期望可保存的结果集,而没有明确要求它们。所以这通常可以解决问题。

标签: jdbc firebird birt report-designer jaybird


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多