JDBC - ResultSet缓存管理

时间:2017-12-12 14:37:41

标签: java jdbc fetch resultset

我正在使用此代码从数据库加载数据:

PreparedStatement inputStmt = connection.prepareStatement("select * from A");  
inputStmt.setFetchSize(3000);
inputStmt.executeQuery();

由于我使用的是setFetchSize,我知道请求一次只能获取3000行,如果需要,它将获取接下来的3000行......

我的问题是:当我们获取第二个3000行时,第一个3000仍然在缓存中吗?

因为我正在阅读一张包含数百万行的表,如果我管理不好,我的callc会出现内存问题。

1 个答案:

答案 0 :(得分:2)

默认ResultSet类型为ResultSet.TYPE_FORWARD_ONLY,这意味着您一次只能前进一行。除非驱动程序的实现非常糟糕,否则它将不再在内存中保留任何无法访问的行。

默认提取大小因驱动程序而异。有些默认情况下加载完整的结果集(例如Postgres),其他的则具有较小的提取大小(例如Oracle),这对于某些类型的任务甚至可能无效。