【问题标题】:Does JDBC have a maximum ResultSet size?JDBC 是否有最大的 ResultSet 大小?
【发布时间】:2014-10-29 06:58:53
【问题描述】:

JDBC 将专门从 Hive 查询放入 ResultSet 中的行数是否有上限?我不是在谈论获取大小或分页,而是在 ResultSet 中返回的总行数。

如果我错了,请纠正我,但是提取大小设置了 jdbc 每次在数据库中处理时查看的行数,将适当的响应插入到 ResultSet 中。当它遍历完表中的所有记录后,它会将 ResultSet 返回给 Java 代码。我在问返回给 Java 代码的行数是否有限制。

如果它没有最大行数,那么该类是否有任何固有的东西可能导致某些记录被修剪掉?

【问题讨论】:

  • 程序运行时结果集对象背后的数据是否正在更新?
  • 我猜应该是Integer.MAX_SIZE
  • 我认为限制将是用作基类的任何集合类型的限制,我认为接近 Integer.MAX_SIZE stackoverflow.com/a/7632240/16959 或可用于存储记录的内存(曾经用完第一)
  • Java Array 长度也有限制stackoverflow.com/a/3039805/16959
  • 您应该可以使用getMaxRows method of the Statement object 来查看是否设置了任何限制(0 表示没有限制,如果设置了限制,则会静默删除过多的行),但除此之外我会猜测限制将绑定到内存或其他评论者建议的其他资源。

标签: java jdbc hive resultset


【解决方案1】:

不,它不会那样工作。 JDBC 只是原生数据库的包装器。但是 JDBC 或数据库游标的工作方式相同:

  • 您向数据库发送查询(通过 JDBC)
  • 数据库分析查询并初始化游标(JDBC中的ResulSet)
  • 当您从 ResultSet 获取数据时,数据库软件会进入数据库以获取新行并填充 ResultSet

因此,ResultSet 可以包含的行数没有限制,Java 客户端程序可以处理的行数也没有限制。例如,如果您尝试加载内存中的所有行以填充列表并耗尽客户端应用程序内存,则唯一的限制是。但是,如果您处理行而不将它们保存在内存中,则没有限制(就像您读取文件时发生的情况一样)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 2011-02-25
    • 2021-04-14
    相关资源
    最近更新 更多