[英]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.