JDBC是否有最大的ResultSet大小限制?

17

JDBC在从Hive查询中将放入ResultSet的最大行数是否有限制?我不是指fetch size或分页,而是指ResultSet中返回的总行数。

请纠正我如果我错了,fetch size设置JDBC每次在数据库中处理的行数并将适当的响应插入ResultSet。当它遍历表中的所有记录时,它将ResultSet返回给Java代码。我想知道返回给Java代码的行数是否有限制。

如果没有最大行数,那么这个类本身是否存在可能会导致某些记录被修剪掉的因素?


程序运行时,结果集对象后面的数据是否会被更新? - Barranka
3
我猜应该是 Integer.MAX_SIZE - Luiggi Mendoza
1
我认为限制将是作为基类使用的任何集合类型的极限,这接近于Integer.MAX_SIZE https://dev59.com/cmsz5IYBdhLWcg3w0rZC#7632240 或可用于存储记录的内存(以先耗尽者为准)。 - Jason Sperske
Java数组长度也有限制。https://dev59.com/YXA75IYBdhLWcg3w6Nn8#3039805 - Jason Sperske
你应该能够使用 Statement 对象的 getMaxRows 方法(http://docs.oracle.com/javase/6/docs/api/java/sql/Statement.html#getMaxRows%28%29)来查看是否设置了任何限制(0 表示没有限制,如果设置了限制,则过多的行将被静默丢弃),但除此之外,我猜想限制可能会受到内存或其他资源的限制,正如其他评论者所建议的那样。 - jpw
1个回答

23
不,它不是这样工作的。JDBC只是本机数据库的包装器。但是,无论是JDBC还是数据库游标都可以实现以下操作:
  • 您通过JDBC向数据库发送查询
  • 数据库分析查询并初始化游标(在JDBC中为ResulSet)
  • 当您从ResultSet中获取数据时,数据库软件会遍历数据库以获取新行并填充ResultSet
因此,ResultSet可以包含的行数没有限制,Java客户端程序可以处理的行数也没有限制。唯一的限制是如果您尝试将所有行加载到内存中以填充列表,那么可能会用尽客户端应用程序的内存。但是,如果您处理行并且不将它们保留在内存中,则没有限制(就像读取文件时发生的情况一样)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接