【问题标题】:ResultSet working结果集工作
【发布时间】:2012-07-20 13:33:42
【问题描述】:

我很想深入了解 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.

因为该表被许多其他并发程序访问。

【问题讨论】:

  • 你的两个方案是等价的,防止并发访问使用事务。
  • 第二个不适合大型结果集,可能会耗尽内存

标签: java jdbc resultset


【解决方案1】:

这取决于很多因素。

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

查看免费 VisualVM 中的 CPU 和内存分析,或使用一些基本时序来了解正在发生的事情。

【讨论】:

  • .它平均包含800条记录,并且将来会增加。
  • 感谢您的回复。我还想知道循环时间(如果需要一些时间)中的这种计算是否会影响其他访问同一张表的人?
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多