【发布时间】:2014-07-29 15:42:23
【问题描述】:
一开始,我问了this的问题
我通过将fetchSize 设置为Integer.MIN_VALUE 来解决这个问题,但我对此有一些疑问
- 当我将 fetchSize 设置为 10 或其他正整数时,它不起作用,将其设置为
Integer.MIN_VALUE后它起作用,这是为什么? - 如果我们设置负值,那么它会给出非法值错误,但
Integer.MIN_VALUE是-2147483648那么为什么它没有给出错误呢? - 此表包含 600 万条记录,我在获取 100 或 200 条记录后关闭了
resultset,然后需要 30-35 秒的时间。 - 减少关闭
resultset的时间的解决方案。
我想在这里添加更多内容
我已经用 MySQL 驱动程序对此进行了测试,它接受Integer.MIN_VALUE
但是当我在 SQL Server 中测试相同的代码时,它会给出错误The fetch size cannot be negative.,如果我将它设置为 10 则它可以工作,它也适用于 Oracle。
【问题讨论】:
-
Integer.MIN_VALUE可能很棘手。只需查看以下方法调用的结果。System.out.println(Math.abs(-1));、System.out.println(Math.abs(Integer.MIN_VALUE + 1));和System.out.println(Math.abs(Integer.MIN_VALUE));我并不是说这是您遇到的行为的原因,但它可能是。只能通过调查您正在使用的数据库抽象下的代码来判断。 -
是的,那是正确的,但那是因为整数溢出
-
您如何保证 DB 访问抽象下的代码没有做任何与溢出有关的事情?
标签: java prepared-statement resultset