我们有一个使用JPA的Java EE应用程序。 用户可以要求应用程序根据大型查询的结果生成一些输出(大图表等),因此在这种情况下,我们决定直接使用JDBC并循环结果集。 我们已经实现了这样的代码:
@Resource(mappedName = "jdbc/resource")
private DataSource dataSource;
Connection connection = dataSource.getConnection();
[...]
Connection conn = dataSource.getConnection();
stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);
[...]
ResultSet rs = stmt.executeQuery(sql);
while (rs.hasNext()) {
[....]
}
无论如何它总是将所有结果加载到内存中,我们尝试了不同的技术(useCursorFetch true和fetch size = 10等),没有运气,我们总是没有流结果集。
“jdbc / resource”与jpa实体管理器使用的资源相同(因此工作正常),连接没有“怪异”选项,我们使用glassfish 4.1进行测试,我们使用的是连接器/ J版本5.1.26和5.1.32。
有没有办法获得有效的流式结果集?