2016-05-23 55 views
0

我想從postgres中獲取數據到另一個數據庫,我正在使用camel-jdbc組件來完成它。我有一張大桌子,所以我想一次只讀幾行,而不是整個表格。所以我的路線如下所示(僅用於測試目的) from(fromUri).setBody(「select * from table limit 10」).to(「jdbc:// myDataSource?resetAutoCommit = false & statement.fetchSize = 2」)如上所示,我一次只能獲得10行用於測試目的,並且我已將fetchSize設置爲2,以便只在接收2行時獲得2行時間。但是,我仍然收到所有10行。當我從查詢中刪除「limit 10」時,在split命令之前出現Out of Memory錯誤,它告訴我它嘗試將整個結果集加載到內存中。駱駝jdbc內存不足異常

我在這裏錯過了什麼或者我做錯了什麼?

感謝您的幫助。

回答

0

我認爲fetchSize更像是JDBC驅動程序的提示。您可以使用maxRows選項來真正限制服務器端,例如statement.maxRows=2。您可以在JDBC javadoc文檔中閱讀有關這些選項的更多信息。

https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html

+0

statement.maxRows = 2確實沒有用。它所做的只是返回2行並丟棄剩餘的8行,這不是我想要的。 – Pri

+0

在Camel JDBC uri中設置outputType = StreamList並閱讀文檔:http://camel.apache.org/jdbc –

+0

我已經試過了。這就是我最初開始的地方,我的路線看起來像從(fromUri).setBody(select * from table).to(「jdbc:// myDataSource?outputType = StreamList).split(body()).streaming().process測試)。上面的路由不會嘗試加載內存中表的所有數據,並在分割主體之前拋出內存錯誤。 – Pri