0

我们有一个使用 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。

有没有办法拥有一个有效的流媒体结果集?

4

0 回答 0