ResultSet - Cursor:rs.next()花费大量时间

时间:2012-04-10 09:03:14

标签: java oracle jdbc

我从数据库返回的游标在31毫秒(毫秒)内执行。

但是当我使用这个超过1500行的游标来获取行

  ResultSet rs = (ResultSet)cstm.getObject(6);

  while(rs.next()){
     system.out.println("...");
  }

只需简单地横穿光标的每一行就需要超过40秒(40000毫秒)

可以做些什么?

2 个答案:

答案 0 :(得分:21)

实际上,默认情况下,JDBC使用10的提取大小 因此,如果你没有设置更大的值,你将为下一个记录调用数据库正好150次......,不需要解释往返的缺点。

您所要做的就是通过将fetchSize设置为.. 100 来测试效果,例如:

statement.setFetchSize(100);

您可以根据自己的环境使用此号码来提高效果。

答案 1 :(得分:5)

您的游标中有超过1500行,而 rs 数据库返回的内容只是对该游标的引用。因此,当您调用 rs.next()时,每次进入数据库cursr并获取光标指针指向的当前记录。

显然,每次进入数据库都需要一些时间,并且每次循环迭代都会获取超过1500次的单个记录。