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自行编程并重复执行查询.

相关文章

连接数据库的方式:第一种方式:ODBC:开放数据库连接是微软...
JDBCRequest 使用VariableNamesmysql:数据库连接池对象var...
 1.JDBCDBC(JavaDataBaseConnectivity):Java数据库连接技术...
1.需要jar包的支持:java.sqljavax.sqlmysql-conneter-java....
1.简介Activiti是一个业务流程管理(BPM)框架,它是覆盖了业务...
1.JDBC体系系统一组规范:接口JDBC接口(API)包括两个层次:...