如何处理while循环中的异常?

时间:2010-11-29 17:42:37

标签: java jdbc exception-handling

我在java中有这样的情况:

while(resultset.next()){
   try{
      //some executable prepared statements written
   }
   catch(MySQLIntegrityConstraintViolationException ex){
      //block2
   }
   catch(SQLException ex){
      //block1
   }
}

现在在这里,我想要做的是,如果看到MySQLIntegrityConstraintViolationException,我必须跳过它,继续下一条记录...... 我无法找到这样做的机制。 请有人建议应该做什么,以便忽略该异常。

请让我知道..非常感谢你。

2 个答案:

答案 0 :(得分:1)

更好地了解您的数据库。

这里有很多问题。

1)您准备好的陈述是否参与了交易? (即它是否会回滚?)
2)准备好的语句是否更新行?
3)在捕获并处理异常后,您能保证数据库处于已知状态吗?

尝试忽略异常是错误的方法。当前代码(如图所示)确实允许您在捕获异常后重复准备好的语句。 'MySQLIntegrityConstraintViolationException'告诉我数据库无法执行您要求的操作;可能是重复的密钥或涉及所需外键的删除。

您需要了解数据库表的约束,才能真正了解如何响应此异常。

在插入重复项的情况下,我遇到过这样的情况:我必须告诉数据库引擎忽略重复,或者指示应该通过管道传输表/文件。

这里最好的答案是理解为什么准备好的声明抛出异常,然后计划如何应对这种情况。如果您已经知道这一点,请将其添加到问题中,否则我们将抓住吸管。

答案 1 :(得分:0)

我认为您可能会遇到任何其他异常,请尝试执行以下操作以了解您是否收到任何其他异常,

while(resultset.next()){
   try{
  //some executable prepared statements written
   }
   catch(Exception ex){
   if(ex instanceof MySQLIntegrityConstraintViolationException)
   continue;
   else
   ex.printStackTrace();
  }

}