3

我正在使用 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";
}

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

当我将数据集的 queryText 编辑为

SELECT "0" from kontrolle

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

设计大致是这样的:

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

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

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

4

1 回答 1

2

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

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

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