JDBC - 结果集缓存管理
JDBC - ResultSet cache management
我正在使用此代码从数据库加载数据:
PreparedStatement inputStmt = connection.prepareStatement("select * from A");
inputStmt.setFetchSize(3000);
inputStmt.executeQuery();
由于我使用的是 setFetchSize,我知道该请求一次只会获取 3000 行,如果需要,它将获取接下来的 3000 行...
我的问题是:当我们获取第二个 3000 行时,前 3000 行是否保留在缓存中?
因为我正在读取一个有数百万行的 table,如果我不能很好地管理我的 callc,我将遇到内存问题。
默认的ResultSet
类型是ResultSet.TYPE_FORWARD_ONLY
,意思是你只能往前走,一次一行。除非驱动程序实现得很差,否则它不会再在内存中保留任何不可访问的行。
不同驱动程序的默认提取大小不同。有些默认加载完整的结果集(例如 Postgres),有些则具有较小的提取大小(例如 Oracle),这对于某些类型的任务甚至可能无效。
我正在使用此代码从数据库加载数据:
PreparedStatement inputStmt = connection.prepareStatement("select * from A");
inputStmt.setFetchSize(3000);
inputStmt.executeQuery();
由于我使用的是 setFetchSize,我知道该请求一次只会获取 3000 行,如果需要,它将获取接下来的 3000 行...
我的问题是:当我们获取第二个 3000 行时,前 3000 行是否保留在缓存中?
因为我正在读取一个有数百万行的 table,如果我不能很好地管理我的 callc,我将遇到内存问题。
默认的ResultSet
类型是ResultSet.TYPE_FORWARD_ONLY
,意思是你只能往前走,一次一行。除非驱动程序实现得很差,否则它不会再在内存中保留任何不可访问的行。
不同驱动程序的默认提取大小不同。有些默认加载完整的结果集(例如 Postgres),有些则具有较小的提取大小(例如 Oracle),这对于某些类型的任务甚至可能无效。