我们有一个使用 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。
有没有办法拥有一个有效的流媒体结果集?