首页 > 解决方案 > 删除 ResutSet 缓存数据

问题描述

我需要查询 ResultSet 大小,并使用以下代码执行此操作:

int size =0;
if (rs != null) {
rs.last();
size = rs.getRow();
rs.beforeFirst();
}

比我用经典迭代 ResultSet :

while (rs.next()) {
// do some
}

现在,如果我的 ResultSet 中有例如 200 行,则迭代的执行时间约为 500 毫秒。如果我执行代码的第一部分(以获取 ResultSet 大小),迭代执行时间会下降到 50 毫秒。

这可能是因为数据被缓存了,有没有办法避免这种情况或清理缓存?

谢谢


大家好,感谢您的回复,所以:

1)我需要知道结果集中有多少行,因为一些查询提取了数千条记录,我需要通知用户进度百分比。为此,我显然需要最大值和中间值。

2)正如 Bob Jarvis 所说,我想像第一次一样缓慢地重新迭代结果集,这很愚蠢,但我不能以低于 100 毫秒的间隔向客户端推送消息,如果我得到上面写的 ResultSet (代码的第一部分)进度信息相当无用。例如:包含 600 行的结果集需要 500 毫秒来执行此操作:

int size =0;
if (rs != null) {
rs.last();
size = rs.getRow();
rs.beforeFirst();
}

和 60 再次迭代它,如下所示:

while (rs.next()) {
// do some
}

也许我可以浪费一些时间来更慢地迭代 resultSet,但可以向用户提供有关某些详细说明的执行时间的更准确的信息。

谢谢你们。

标签: javasqloracle

解决方案


推荐阅读