【发布时间】:2016-10-13 16:43:49
【问题描述】:
我刚刚发现 Postgres Java JDBC 驱动程序并不真正支持使用流式传输的 SCROLL_SENSITIVE/SCROLL_INSENSITIVE 模式,而是通过一次将完整结果集加载到客户端内存中来模拟这些模式。对于具有大结果集的查询,这可能会导致出乎意料的大量内存使用,尤其是在像 Java 这样几乎不支持未装箱值的语言中。使用FORWARD_ONLY 模式时,驱动程序按预期流式传输结果。
(details; 据我了解,这是 Postgres 有线协议的限制,尽管驱动程序理论上可以通过将查询转换为显式游标来解决此问题。)
为了防止将来出现这种意外,我想知道这种行为的传播范围有多大,以及哪些其他常见的 JDBC 驱动程序没有在预期的地方实现真正的滚动,所以我知道如果我碰巧要注意这一点使用其中一个驱动程序。还有哪些常见的 JDBC 驱动程序不支持流方式中的所有滚动模式?
【问题讨论】:
-
JDBC 充满了数据库之间的差异,有时甚至是同一数据库的驱动程序(不是驱动程序版本)之间的差异。在这里开始列出它们太宽泛了。
-
您的问题还不清楚。您是否正在寻找与您在此处指定的驱动程序相同的其他驱动程序?或者没有的替代驱动程序?当然,并非所有驱动程序都是平等的。你可以试试the ones from my employer。数据库也不同; Virtuoso comes from my employer.
-
我编辑了问题以澄清意图。我正在寻找不实现类似于 postgres 驱动程序的流式滚动的驱动程序,所以如果我碰巧使用其中一个驱动程序,我知道要注意这种行为。
标签: java sql jdbc stream buffering