我正在尝试将数据从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"从查询中我得到Out of Memory错误就在split命令之前,它告诉我它试图在内存中加载整个结果集。
我在这里错过了什么或者我做错了什么?
感谢您的帮助。
答案 0 :(得分:0)
我认为fetchSize更像是对JDBC驱动程序的暗示。您可以使用maxRows选项真正限制服务器端,例如statement.maxRows=2
。您可以在JDBC javadoc文档中阅读有关这些选项的更多信息。
https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html