2012-07-20 103 views
1

我很想深入了解ResultSet的工作。 我对ResultSet有很多疑问。 如表现明智哪一个更好。ResultSet的工作原理

while(rs.next()) 
{ 
    // iterate as well as do call some other functions. 
} 
    or 
while(rs.next()) 
{ 
// iterate and store the column values in a map 
} 
// do functions using the map. 

由于该表被许多其他并发程序访问。

+0

这两个解决方案都是等效的,以防止并发访问使用事务。 – triclosan 2012-07-20 13:35:33

+0

第二个不适合大的结果集,它可能会耗尽内存 – 2012-07-20 13:42:12

回答

1

它将取决于很多因素。

  • 加工密集程度如何是您的“其他功能”。如果处理是最小的,那么它并不重要,但它涉及很多CPU使用,然后延迟处理,直到结果集关闭,这应该会提高事务性能。
  • 结果集有多大?如果它相当小,然后将它读入一个Map很好,但是如果它的大小和你的处理将把它处理成一个更小的形式,那么你可能会更好地在循环内进行处理。

看看免费的VisualVM中的CPU和内存分析,或者使用一些基本的时序来了解发生了什么。

+0

。它平均包含800条记录,将来会增加。 – JackAss 2012-07-21 05:48:05

+0

谢谢你的回复。我也想知道这个循环时间内的计算(如果需要一些时间)会影响其他人访问同一个表吗? – JackAss 2012-07-21 05:48:17

1

要做的最好的事情是,通常遵循的标准是将所有值存储到对象中,然后返回该对象。这只不过是一个数据传输对象(DTO设计模式)。

在第一种情况下,你正在做的一样

  1. 建立与数据库的连接。
  2. 执行一些SQL语句,然后通过获取结果集。
  3. 并迭代ResultSet, 在此步骤中:您将调用一些其他函数,但我们不知道需要多少时间才能完成。

    主要缺点是持续连接对象长时间不好,因为它可能是其他用户需要的,当然这是最昂贵的。