0

我正在尝试将数据从 postgres 摄取到另一个数据库,并且我正在使用 camel-jdbc 组件来执行此操作。我有一张大桌子,所以我想一次读取几行而不是整个桌子。所以我的路线如下所示(仅用于测试目的) from(fromUri).setBody("select * from table limit 10").to("jdbc://myDataSource?resetAutoCommit=false&statement.fetchSize=2").split( body()).streaming().process(test)

如上所示,出于测试目的,我一次只获取 10 行,并且我将 fetchSize 设置为 2 以一次只接收 2 行。但是,我仍然收到所有 10 行。当我从查询中删除“限制 10”时,我在 split 命令之前收到 Out of Memory 错误,它告诉我它试图将整个结果集加载到内存中。

我在这里错过了什么或者我做错了什么?

感谢帮助。

4

1 回答 1

0

我认为 fetchSize 更多的是对 JDBC 驱动程序的提示。您可以使用 maxRows 选项来真正限制服务器端,例如statement.maxRows=2. 您可以在 JDBC javadoc 文档中阅读有关这些选项的更多信息。

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

于 2016-05-24T12:50:37.507 回答