首页 > 解决方案 > 在 lambda 中使用 ResultSet java 时我缺少一个元素的奇怪场景

问题描述

当我在 lambda 函数内部迭代结果并将结果分配给 lambda 函数外部的变量时,我的 ResultSet 错过了一个元素。但是当我在 lambda 函数中声明一个变量,向它添加值并将其作为函数的一部分返回时,同样的工作正常。

我尝试放置一个计数变量并检查两种情况以查看 while 循环运行了多少次,我确认它运行的次数少了。

Map<String,String> map = new HashMap<>();
getTemplate.query("Some Query that returns 38251 elements", (ResultSet rs) -> {
     int count = 0;
     while(rs.next()) {
         count++;
         map.put(rs.getString("val"),rs.getString("val2"));
    }
   //count here is 38250
});
map.size() -> 38250 //Missing 1 element

但是当我这样做时

Map<String,String> correct = getTemplate.query("Some Query that returns 38251 elements", (ResultSet rs) -> {    
     Map<String,String> map = new HashMap<>();
     int count = 0;
     while(rs.next()) {
         count++;
         map.put(rs.getString("val"),rs.getString("val2"));
    }
   //count here is 38251
   return map;
});
correct.size() // 38251 elements

标签: javajdbc

解决方案


推荐阅读