我想在自定义JDBC驱动程序中实现this方法功能。我应该使用哪种方法来设置setMaxResults?
如果我的查询结果是1000行,并且我已设置setFetchSize = 100的值; 那么结果会是什么? 它将仅返回100行,或者在返回100之后,它将从db获得下一个100,直到1000行完成。
答案 0 :(得分:4)
为JDBC驱动程序提供有关当此
ResultSet
生成的Statement
对象需要更多行时应从数据库中提取的行数的提示。如果指定的值为零,则忽略提示。默认值为零。
因此,如果你总共有1000行并且获取大小为100(假设驱动程序不忽略提示或提取大约nr),那么这意味着驱动程序将获取10批中的所有行每行100行。当本地没有可用的行来完成对next()
的调用时,将获取一批行,这将在获取所有行或已到达maxRows
之前完成。
这导致类似:
Statement stmt = ...;
stmt.setFetchSize(100);
ResultSet rs = ...;
rs.next(); // Triggers fetch of 100 rows, positions on row 1 / 100
rs.next(); // Positions on row 2 / 100
// 3-99 rs.next();
rs.next(); // Positions on row 100 / 100
rs.next(); // Triggers fetch of 100 rows, positions on row 101 / 200
// etc
理想情况下,从JDBC规范的角度来看。有些驱动程序忽略了提示(例如,如果将MySQL设置为Integer.MIN_VALUE
并忽略所有其他值,则MySQL会滥用它来逐行获取),并且某些数据库将采用提示,但随后返回较少(有时更多)比请求的行。
我发现您链接的com.google.api.services.bigquery.model.QueryRequest.setMaxResults
的文档并不完全清楚,但它似乎做同样的事情。