2015-08-25 66 views
3

我使用BIRT報表設計器4.4.0和我不斷收到錯誤消息BIRT報表設計器空數據集的腳本

org.eclipse.birt.report.engine.api.EngineException:無法獲取下一個數據行。 org.eclipse.birt.report.data.oda.jdbc.JDBCException:無法向下移動到結果集中的下一行。 SQL錯誤#1:結果集關閉; org.firebirdsql.jdbc.FBSQLException:結果集關閉

當BIRT試圖從我知道是空的數據集中獲取一行時。我發現,這是BIRT一個常見的問題,並試圖防止空數據集的數據集beforeOpen腳本中,我可能做錯了,因爲它沒有工作。 我創建了一個變量[「item」],並且想要統計OnFetch被調用的頻率。

BeforeOpen:

vars["item"] = 0; 

OnFetch:

vars["item"]++; 

BeforeClose:

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> 

第二個表僅由一個參數綁定到所述第一表中,然而,第三表具有兩個參數綁定到第二個。

希望的解釋是不夠好,有人可以提供一個解決方案。

+0

? –

+0

我使用Jaybird 2.2.7 – jera

+0

會發生什麼事,如果你加上'defaultResultSetHoldable = TRUE;在連接屬性(例如,在JDBC URL)? –

回答

2

如前所述評論,添加defaultResultSetHoldable=true到連接性能(例如在JDBC URL)。這指示Jaybird默認創建與可保留結果集的連接(相當於在代碼中調用connection.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT))。

我真的不知道BIRT,所以這只不過是一個猜測的原因更多:

  1. 它可以預計可保持的結果集,而不明確地詢問或檢查他們,並打開後提交結果集(在Jaybird默認結果集關閉上提交)
  2. BIRT可以使用autoCommit=true(默認值),但不指望結果集要在同一個連接中的另一語句的執行關閉(這會導致關閉結果集等資源,以及JDBC標準指定的提交;在某些方面,這是第1點的專門化)。
  3. 您正在使用哪個版本Jaybird
+0

非常感謝! – jera

相關問題