当前位置: 首页 > 面试题库 >

与Statement对象的setFetchSize方法混淆

程修雅
2023-03-14
问题内容

我可以通过设置fetchSize为来解决此Integer.MIN_VALUE问题,但是对此我有一些疑问

  1. 当我将fetchSize设置为10或其他正整数时,它不起作用,将其设置为Integer.MIN_VALUE有效后,为什么呢?
  2. 如果我们设置负值,则它给非法值错误,但Integer.MIN_VALUE就是-2147483648那么,为什么不给错误?
  3. 该表包含600万条记录,resultset在获取100或200条记录后我关闭了该表,这需要30-35秒的时间。
  4. 减少关闭时间的解决方案resultset

我想在此处添加更多内容,并已使用MySQL驱动程序对其进行了测试,并且可以接受,Integer.MIN_VALUE 但是当我在SQL
Server中测试相同的代码时,它将给出错误The fetch size cannot be negative.;如果将其设置为10,则它可以工作,它也适用于Oracle。


问题答案:

MySQL驱动程序将Integer.MIN_VALUE用作切换到流式结果集模式的信号。它不用作值。请参阅“结果集”下的文档。综上所述:

默认情况下,完全检索结果集并将其存储内存中。您可以通过设置stmt.setFetchSize(Integer.MIN_VALUE);(与只进,只读结果集结合)告诉驱动程序一次将结果流回一行。

因此,这非常特定于MySQL Connector / J驱动程序。

至于为什么关闭结果集需要花费很长时间,同样的文档也暗示了这一点:“必须先读取(或关闭)结果集中的所有行,然后才能对连接发出任何其他查询,否则将引发异常。“
即关闭结果集将首先读取所有剩余的行,然后关闭结果集。而且由于现在读取行是逐行完成的,因此可能会花费很长时间。

看来(我没有测试它)有流播结果集可能会做你想要什么(不使用MySQL的限制条款)的替代,它涉及到配置性能
useCursorFetch=true和使用情况进行了说明这里。



 类似资料:
  • 看过 angular2 的人基本都知道,它大量使用了装饰器,而装饰器还属于 ecmascript 的征集意愿的第一阶段。 使用装饰器,需要在 tsconfig.json 里面开启支持选项 experimentalDecorators // tsconfig.json "experimentalDecorators": true 装饰器基本可以对所有变量起作用,它的语法是 @装饰器 ,这个装饰器必须

  • 但如果我用: 如果需要,我很乐意提供整个SSCE,但目前,为了让事情更简短,下面是TableModel的getValueAt()和setValueAt()方法: 数据只是Person类型的arraylist(一个具有明显变量(String)fName、(String)sName和(LocalDate)DOB的类) 任何帮助都将不胜感激!

  • 我们已经讨论了类与对象的功能部分,现在我们来看一下它的数据部分。事实上,它们只是与类和对象的名称空间 绑定 的普通变量,即这些名称只在这些类与对象的前提下有效。 有两种类型的 域 ——类的变量和对象的变量,它们根据是类还是对象 拥有 这个变量而区分。 类的变量 由一个类的所有对象(实例)共享使用。只有一个类变量的拷贝,所以当某个对象对类的变量做了改动的时候,这个改动会反映到所有其他的实例上。 对象

  • 我已经通过字符串的拆分方法留档,但结果并不像预期的那样。当我们将限制参数设置为负值的字符串拆分时,它总是附加一个空值。为何要这样做呢?考虑一些案例 我希望这两张照片都是3。 现在,由于没有找到匹配项,通常的split with limit方法应该打印0,但它创建了一个带有空字符串的数组。 现在我有了一个匹配项,无限制参数的split方法可以很好地工作。它是我预期的输出,但为什么它不在本例中创建一个

  • 关于混合对象 可以混合对象以创建形状,并在两个对象之间平均分布形状。也可以在两个开放路径之间进行混合,在对象之间创建平滑的过渡;或组合颜色和对象的混合,在特定对象形状中创建颜色过渡。 注:混合对象与将混合模式或透明度应用于对象不同。有关混合模式和透明度的信息,请参阅第 158 页的 “关于混合模式 ”。在对象之间创建了混合之后,就会将混合对象作为一个对象看待。如果您移动了其中一个原始对象,或编辑了

  • 问题内容: 两者相同吗? 假设您有: 然后您可以选择以下任一项: 要么 两种语法之间有什么区别吗?我偶然发现了很多糖吗? 问题答案: 严格来说,它们将产生相同的结果,但是如果将前一种情况用作其他条件的条件,则会得到不同的结果。这是因为在的情况下,将返回一个值以表示其成功。