我可以看到Java ResultSet从数据库请求数据的次数吗?我有一个大表(100万条记录),我想看看它从数据库中提取了多少数据块。我的数据库是Oracle。
结果集"文档状态:
获取大小默认情况下,当Oracle JDBC运行查询时,它每次从数据库游标检索10行的结果集。这是默认的Oracle行读取大小值。您可以通过更改行获取大小值来更改每次访问数据库游标时检索的行数。
标准JDBC还允许您指定每次数据库往返查询获取的行数,这个数字称为获取大小。在Oracle JDBC中,行预取值被用作语句对象中的默认取值大小。设置读取大小将覆盖行预取设置,并影响通过该语句对象运行的后续查询。
Fetch size也用于结果集。当语句对象运行查询时,将语句对象的获取大小传递给查询生成的结果集对象。但是,您也可以在结果集对象中设置取值大小,以覆盖传递给它的语句取值大小。
注意:
在生成结果集后,对语句对象的取值大小进行更改不会对结果集产生影响。
结果集取值大小,要么显式设置,要么默认等于传递给它的语句取值大小,它决定了在该结果集的任何后续访问数据库时检索的行数。这包括完成原始查询仍然需要的任何行程,以及将数据重新获取到结果集中的任何操作。可以显式或隐式地重新获取数据,以更新滚动敏感或滚动不敏感/可更新的结果集。
设置读取大小
所有
Statement
、PreparedStatement
、CallableStatement
、ResultSet
对象中设置和获取抓取大小的方法如下:void setFetchSize(int rows) throws SQLException int getFetchSize() throws SQLException
要设置查询的读取大小,请在运行查询之前在语句对象上调用
setFetchSize
。如果您将获取大小设置为N
,则每次访问数据库都会获取N
行。运行查询后,您可以在结果集对象上调用
setFetchSize
来覆盖传递给它的语句对象获取大小。这将影响到为原始查询获取更多行而访问数据库的任何后续操作,以及影响到以后重新获取行的任何操作。
如果您想知道访问数据库的次数,则在语句上调用getFetchSize()
,然后将结果集中的总行数除以取值大小(并四舍五入)。