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,所以这只不过是对原因的有根据的猜测:
- 它可以在不明确询问或检查结果集的情况下期望可持有的结果集,并在打开结果集后提交(在 Jaybird 中,默认情况下结果集在提交时关闭)
- BIRT 可以使用
autoCommit=true
(默认值),但不希望在同一连接上执行另一个语句时关闭结果集(这会导致关闭结果集等资源,并且按照 JDBC 标准的规定提交;在某些方面,这是第 1 点的特化)。
我正在使用 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,所以这只不过是对原因的有根据的猜测:
- 它可以在不明确询问或检查结果集的情况下期望可持有的结果集,并在打开结果集后提交(在 Jaybird 中,默认情况下结果集在提交时关闭)
- BIRT 可以使用
autoCommit=true
(默认值),但不希望在同一连接上执行另一个语句时关闭结果集(这会导致关闭结果集等资源,并且按照 JDBC 标准的规定提交;在某些方面,这是第 1 点的特化)。