Java JDBC Lazy-Loaded ResultSet

有没有办法获得从运行JDBC查询获得的ResultSet来延迟加载? 我希望每行都按照我的要求加载,而不是事先加载。

您是否可以通过将Statement的获取大小设置为1来实现此目的?

如果您一次只获取1行,则在ResultSet上调用next()之前,不应加载每一行。

例如

 Statement statement = connection.createStatement(); statement.setFetchSize(1); ResultSet resultSet = statement.executeQuery("SELECT ....."); while (resultSet.next()) { // process results. each call to next() should fetch the next row } 

我想你想要做的是推迟实际加载ResultSet本身。 您需要手动实现它。

这里有一个答案。

引用:

Presto JDBC驱动程序永远不会将整个结果集缓冲在内存中。 每个请求,服务器API将向驱动程序返回最多约1MB的数据。 在消耗数据之前,驱动程序不会从服务器请求更多数据(通过在ResultSet上调用next()方法适当的次数)。

由于服务器API的工作方式,忽略了驱动程序提取大小(根据JDBC规范,它只是一个提示)。

certificate忽略了setFetchSize

你会发现这很容易使用hibernate 。 如果你直接使用jdbc,你基本上必须自己滚动。

hibernate中的提取策略是高度可配置的,并且很可能提供您甚至不知道的性能选项。