Java JDBC Lazy-Loaded ResultSet
2022-09-01 10:50:57
有没有办法获取从运行JDBC查询中获得的结果集,以便延迟加载?我希望每一行都按照我的要求加载,而不是事先加载。
有没有办法获取从运行JDBC查询中获得的结果集,以便延迟加载?我希望每一行都按照我的要求加载,而不是事先加载。
呼叫 前使用 。Statement.setFetchSize(1)
executeQuery()
这在很大程度上取决于您使用的 JDBC 驱动程序。您可能想看看这个页面,它描述了MySQL,Oracle,SQL Server和DB2的行为。
主要要点:
setFetchSize()
MySQL是一个特别奇怪的案例。请参阅此文章。听起来好像如果你调用 ,那么它会一次下载一个行,但它并不完全清楚。setFetchSize(Integer.MIN_VALUE)
另一个例子:这是PostgreSQL行为的文档。如果启用了自动提交,则 ResultSet 将一次读取所有行,但如果关闭,则可以按预期使用。setFetchSize()
最后要记住的一件事是:这些 JDBC 驱动程序设置仅影响客户端上发生的情况。服务器可能仍将整个结果集加载到内存中,但您可以控制客户端下载结果的方式。
难道不能通过将语句的提取大小设置为 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
}