繁体   English   中英

Mysql流结果集和jOOQ fetchLazy

[英]Mysql streaming result set and jOOQ fetchLazy

通常,当我想使用Mysql查询大型结果集时,我写这个(取自这个答案 ):

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);

现在我正在使用jOOQ 2.0.5,我无法达到相同的效果。

我试过没有运气调用fetchLazy ,它将整个结果集加载到内存中:

Cursor<Record> result = query.fetchLazy(Integer.MIN_VALUE);

作为一种解决方法,我可以使用query.getSQL()获取sql查询,并创建一个合适的Statement来执行它。

有没有其他方法可以使用jOOQ获得流结果集?

根据JDBC规范, Integer.MIN_VALUE不是Statement.setFetchSize()方法的有效参数:

当此Statement生成的ResultSet对象需要更多行时,为JDBC驱动程序提供有关应从数据库中提取的行数的提示。 如果指定的值为零,则忽略提示。 默认值为零。

参数:

rows要获取的

抛出 :SQLException - 如果发生数据库访问错误,则在关闭的Statement上调用此方法,或者不满足条件rows> = 0。

实现可能会为负提取大小抛出SQLException 因此,jOOQ不接受参数小于0。您应该尝试使用获取的大小1代替。 与此同时,jOOQ的下一个版本可能会破坏JDBC标准,以支持这个记录的MySQL功能

https://github.com/jOOQ/jOOQ/issues/1263 (在jOOQ 2.2.0中实现)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM