我在java中有这样的情况:
while(resultset.next()){
try{
//some executable prepared statements written
}
catch(MySQLIntegrityConstraintViolationException ex){
//block2
}
catch(SQLException ex){
//block1
}
}
现在在这里,我想要做的是,如果看到MySQLIntegrityConstraintViolationException
,我必须跳过它,继续下一条记录......
我无法找到这样做的机制。
请有人建议应该做什么,以便忽略该异常。
请让我知道..非常感谢你。
答案 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();
}
}