由于脏数据或者场景考虑不全面引发的生产问题

  就是一个简单的查询过滤接口,但是在上生产时却报了错,代码大致如下:

      if(board.getName() == null || board.getName() ==""){
            iterator.remove();
        }
      if(board.getPbiCode() == null || board.getPbiCode() == ""){
            iterator.remove();
        }
很简洁的逻辑,就是使用迭代器移除不符合要求的对象,开发后测试没有什么问题,但是在联调时却发现,这个报错了。
其原因就在于迭代器移除了2次,而测试代码告诉我们迭代器时不能移除多次的,这和List,Map,Set对象容器有这个本质的区别

  改成这样就不会报错了:

    if (board.getName() == null || board.getName() == "") {
            iterator.remove();
    } else if (board.getPbiCode() == null || board.getPbiCode() == "") {
            iterator.remove();
        }
加了一个else,增加了代码的健壮性。

  这个问题原因在于迭代器的不支持对象的二次移除,以及数据库中有脏数据。

  在查看数据库是否与脏数据时,大体是两个表的查询。但是我老是想到子查询,查询出来的是一条记录,感觉写不出来这个sql。但是同事提醒了我,使用join查询,就可以联合两张表,查看是否存在数据缺失的问题了。同事的提醒,让我觉得我自己的mysql书白看了,竟然简单的sql使用都不会。还有一次就是where后面拼接的多个and的情况,我感觉写不出来,但是人家很快就写出口来了。这说明sql是一个很具有实践性的技术,要不断实践才能掌握。

猜你喜欢

转载自www.cnblogs.com/Robin008/p/12904910.html