微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 是否有一个尊重fetchSize的mysql JDBC?

我正在使用MySQL,并希望利用setFetchSize属性.认的MysqL JDBC实现并不真正尊重它.如果你将fetchsize设置为Integer.MIN_VALUE,它将分别获取每一行,但考虑到我想使用fetchSize的原因是我有足够的数据将我的内存使用量放到2 G范围内,每行必须进行一次查询永远.

我想插入一个可以与MysqL一起工作的JDBC实现并正确地考虑获取大小,允许我设置一个10,000或其他更高限制的fetchsize.任何人都可以指向一个可能提供这种实现的jar吗?失败那是否有任何其他资源允许我合理地以有效的方式进行包含数万个条目的查询,但是在内存和所需的SQL查询数量方面.

解决方法:

技术问题要求图书馆是偏离主题的.也就是说,据我所知,没有替代MysqL的驱动程序.您可以选择获取可能导致内存不足情况的所有行,也可以选择让驱动程序通过设置setFetchSize(Integer.MIN_VALUE)按需获取它们.

正如我在Connector/J implementation notes中所理解的那样,原因是MysqL协议每个连接不能打开多个游标,因此它认在执行时将所有行传输到客户端.

一个选项是逐行检索行,但这会带来在处理ResultSet时无法在同一连接上执行其他语句的问题:

There are some caveats with this approach. You must read all of the rows in the result set (or close it) before you can issue any other queries on the connection, or an exception will be thrown.

所以MysqL只能选择获取所有内容或一次获取一个.这意味着驱动程序无法遵守不同的提取大小.由于在逐个获取时需要注意,他们选择使用Integer.MIN_VALUE(而不仅仅是1)作为在执行此操作之前应该考虑的信号.

可能的“中间”解决方案需要您使用LIMIT和OFFSET自行编程并重复执行查询.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐