【问题标题】:Oracle SQL / Java : Get the size of returned dataset from a queryOracle SQL / Java:从查询中获取返回数据集的大小
【发布时间】:2012-04-18 07:39:46
【问题描述】:

是否可以知道SQL语句返回的数据集的大小(以字节为单位)

如果我可以从查询本身获得数据的大小,那就太好了。我发现了类似使用 SQL Plus 的东西,但我无法在我的 Java 代码中使用它。

我知道在 Java 中可能有办法做到这一点,谁能指导我如何做到这一点。

提前致谢。

【问题讨论】:

  • AFAIK 数据库在完成检索最后一个结果之前不知道查询的大小,所以不知道,除非你能找到一种方法来估计这个数字。用 sql+ 怎么做?
  • 字节大小是多少?服务器发送的字节数,包括协议开销?驱动程序使用的字节数?作为纯 Java 对象的字节数?读取结果后您自己的对象使用的字节数?
  • @assylias,我发现这个链接stackoverflow.com/questions/1410881/…可以通过字节显示大小,我希望使用SQL或Java代码有类似的方法
  • @sprenna 我以为您想提前知道记录集中的记录数。您似乎想以字节为单位评估记录集的大小,这是不同的。如上所述,该大小取决于您如何定义它。不知道Java能不能做到。

标签: java sql oracle


【解决方案1】:

Docs:

ResultSet 对象维护一个指向其当前数据行的游标。最初,光标位于第一行之前。 next 方法将光标移动到下一行,并且由于在 ResultSet 对象中没有更多行时返回 false,因此可以在 while 循环中使用它来遍历结果集。

ResultSet 不是一个集合,它只是用于以行方式获取数据的游标的抽象。

那么,究竟需要什么?存储结果所需的内存量?数据库中数据的大小? ...? 为什么会很好?

您始终可以使用SELECT COUNT(*) FROM 并使用某个平均行大小来估计结果大小...而不是使用SELECT COUNT(*),您可以使用更复杂的方式:转到最后一个元素ResultSet.last() 并获取行号:ResultSet.getRow()

【讨论】:

  • 在我们的应用程序中,我们向用户展示了总数据集的一个子集,他们将获得最多 500 行,但用户需要了解数据集的总大小,即这就是为什么如果通过 sql 查询我们可以获得数据集的大小或者我们可以实现这一点的 java 方法会很好。
  • COUNT() 方法为我们提供查询的行数,有没有办法将其转换为字节?
  • 是否有需要字节的特定原因?大多数普通用户对 50000 行(相似)中的 500 行感到满意。
  • 用户想知道下载整个数据集需要多长时间,所以他们想查看显示数据的大小。但是根据您的cmets,我相信这可能不是可行的方法。只会让他们知道。谢谢你们所有的cmets,感激不尽。 ^_^
【解决方案2】:

我知道在 Java 中可能有办法做到这一点,谁能指导我如何做到这一点。

我很确定答案是没有简单的方法来做到这一点。

JDBC 抽象对您隐藏了数据库驱动程序的实现细节,并且用于对结果集进行编码的字节数是特定于驱动程序的。

一旦结果集被具体化到 Java 堆中,理论上就可以找出它的大小。但实际上,你必须遍历结果集中的每个堆节点……这不是一个简单的问题。


COUNT() 方法为我们提供查询的行数,有没有办法将其转换为字节?

总之,没有。甚至在理论上也没有。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 2017-08-30
    • 1970-01-01
    • 2019-09-26
    • 2020-02-06
    • 1970-01-01
    相关资源
    最近更新 更多