【发布时间】:2009-05-22 09:30:19
【问题描述】:
我有java.sql.Statement,其中添加了许多批处理语句,并添加了addBatch。执行executeBatch 将在违反数据库约束的第一条语句之后抛出BatchUpdateException,并且不会批量执行所有剩余的语句。有什么方法可以批量执行所有语句而忽略错误的语句?
【问题讨论】:
标签: jdbc
我有java.sql.Statement,其中添加了许多批处理语句,并添加了addBatch。执行executeBatch 将在违反数据库约束的第一条语句之后抛出BatchUpdateException,并且不会批量执行所有剩余的语句。有什么方法可以批量执行所有语句而忽略错误的语句?
【问题讨论】:
标签: jdbc
我认为更好的解决方案是修复错误的解决方案。怎么了? SQL?基础表?数据?
异常应该是“异常的”。什么情况如此常见以至于您可能会在这批产品中更频繁地看到它?
例外是告诉你有什么不对劲。我不想推荐允许您忽略该消息的修复程序。如果抛出异常,则意味着您有机会在 catch 块中改善其根本问题。
如果您要循环处理批处理中的每个语句,您可以单独捕获每个语句的异常并简单地记录错误。只是不要完全忽略它。
但除非你能想到另一种恢复策略,否则你就不走运了。
【讨论】:
有关类似问题和答案,请参阅 BatchUpdateException: the batch will not terminate。
它说批处理将在抛出异常的那一刻终止。你不能只执行好的。
【讨论】:
好吧,如果你想保存所有可能插入的数据,只需执行提交,并被保存。
不可能对批处理中的每条语句进行循环,只有当你调用执行批处理时,你才会得到异常,而不是在每条语句(addbatch)上,所以无法找到错误的确切位置:你可以保存其中的一部分,或者什么都不保存,由您决定(提交或回滚)。
【讨论】: